我的Xamarin.Forms应用程序有几个接口(用于Dependency
),其中包含Android和iOS的实现。它们中的方法不是异步的。现在我想为UWP添加这些接口的实现,但是一些需要的方法是异步的,所以它们不适合签名。我如何处理这个问题?是唯一为UWP创建单独界面的解决方案吗?当Android和iOS不是异步时,如何处理UWP异步?
回答
在这些场景中我倾向于使用Task.FromResult方法对于非异步实现。例如:在Windows上有一个方法返回一个类型为bool的Task,并且你想在Android和iOS上为返回bool的方法实现相同的功能。
public interface ISample
{
public Task<bool> GetABool();
}
在Windows上,将只返回任务
public class WindowsSample : ISample
{
public Task<bool> GetABool()
{
// whatever implementation
return SomeTaskOfTypeBool();
}
}
Android或iOS上,你会在包装任务
public class AndroidSample : ISample
{
public Task<bool> GetABool()
{
// replace with however you get the value.
var ret = true;
return Task.FromResult(ret);
}
}
这是个好主意。而不是尝试同步异步,让我们异步同步。如果你不能击败他们,加入他们。 :) – ispiro
每当我看到有人打电话。结果在一个任务,我的一小块死亡。 –
您不能使用await关键字。您必须创建一个新的任务并等待任务完成。一个单独的界面是不必要的。使用任务进行异常处理可能会非常棘手,请告诉您自己。
调用异步方法方法1与返回值:
string s = Task.Run(() => Method1()).Result;
无返回值:
Task.Run(() => Method1()).Wait;
.Rest或.Wait块,直到任务完成。
你刚刚打开了一袋死锁。 – Bart
- 1. 如何处理异步函数中的异常UWP App GetFileFromPathAsync(path);
- 2. 当HTTP不是时,Spray如何异步?
- 3. 异步TaskManager处理作业/步异常
- 4. GLES iOS,Android RenderBuffer同步还是异步?
- 5. System.Threading.Timer处理异步超时?
- 6. 异步和并行处理
- 7. 事务和异步处理
- 8. EJB和异步处理
- 9. 异步任务和处理程序Android
- 10. 什么是“异步异常处理”
- 11. Node.js处理异步
- 12. Java异步处理
- 13. 异步处理ODP.NET
- 14. 节点异步和异常处理
- 15. 何时处理TcpClients时使用异步?
- 16. nodejs-redis(&connect-redis)如何处理同步和异步?
- 17. 地理位置异步iOS
- 18. 同步处理异步输入
- 19. Android的处理器运行的异步
- 20. 处理UI的Android异步任务
- 21. facebook android sdk认证是异步的。如何处理它?
- 22. 异步处理消息框
- 23. 的AsyncTask(异步处理)
- 24. Tornado异步处理程序
- 25. 处理NodeJS异步行为
- 26. java中的异步处理
- 27. Rails异步处理模型
- 28. Tomcat 7异步处理
- 29. 处理在异步Workitemhandler
- 30. RxJS流的异步处理
值,你可以张贴代码为您的接口?没有代码时很难提供建议。 –
像'string Method1();'这将需要在UWP:'任务 Method1();'。 –
ispiro
你可以为所有3个平台做异步接口吗? –