Multithreading Xamarin使用async./wait VS wait Task.Run(在Xamarin中)
我一直在研究async/await和await Task.Run,但还没有找到明确的结论Multithreading Xamarin使用async./wait VS wait Task.Run(在Xamarin中),multithreading,xamarin,async-await,Multithreading,Xamarin,Async Await,我一直在研究async/await和await Task.Run,但还没有找到明确的结论 “async/await”是否总是在与UI分离的线程上运行?如果是,为什么要使用“等待任务.运行” 根据我的研究,建议对CPU密集型任务使用“await Task.Run”,对数据传输场景(I/O)使用“await/async”,但其他人建议对Xamarin中任何更长时间运行的活动使用await Task.Run(如果需要返回)或仅使用Task.Run(启动并忘记) 那么,“await Task.Run
async
/await
不使用额外的线程;它只是让你的用户界面保持快速响应。如果您有CPU绑定的代码,那么您确实需要另一个线程,因此您可以使用Task.Run
,您可以使用wait
来使用它,这样在后台线程运行CPU绑定的代码时,您的UI可以保持响应
但也有人建议在Xamarin中对任何不再运行的活动使用wait Task.Run(如果需要返回)或仅仅使用Task.Run(fire and forget)
我不建议你忘了火。在其他问题中,它可以隐藏异常。我建议始终使用wait
那么,“await Task.Run”的最佳用途是什么呢?特别是在Xamarin的上下文中,与异步/await相比
上面的一般规则是有效的:对于I/O操作使用async
/wait
,对于CPU限制的操作使用Task.Run
。每隔一段时间就会有例外。例如,有时I/O绑定的操作是阻塞的,它们不提供完全异步的API;在这种情况下,最好使用wait Task.Run
来阻止后台线程而不是UI线程,即使操作在技术上是I/O绑定的,而不是CPU绑定的
进一步阅读: