Multithreading Xamarin使用async./wait VS wait Task.Run(在Xamarin中)

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和await Task.Run,但还没有找到明确的结论

  • “async/await”是否总是在与UI分离的线程上运行?如果是,为什么要使用“等待任务.运行”

  • 根据我的研究,建议对CPU密集型任务使用“await Task.Run”,对数据传输场景(I/O)使用“await/async”,但其他人建议对Xamarin中任何更长时间运行的活动使用await Task.Run(如果需要返回)或仅使用Task.Run(启动并忘记)

  • 那么,“await Task.Run”的最佳用途是什么呢?特别是在Xamarin的上下文中,与异步/await相比

    “async/await”是否总是在与UI分离的线程上运行

    根据我的研究,建议对CPU密集型任务使用“wait Task.Run”,对数据传输场景(I/O)使用“wait/async”

    这是一个很好的UI应用程序通用指南。普通
    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绑定的

    进一步阅读:

    您好,您可以看一看,了解这一点会很有帮助。