async await task.run xamarin 表单
Posted
技术标签:
【中文标题】async await task.run xamarin 表单【英文标题】:async await task.run xamarin forms 【发布时间】:2020-08-01 22:34:55 【问题描述】:我只是想确保我理解 async await 和 Task.run 或 Task.whenall 之间的区别
所以async await就是处理异步方法。这意味着有一个隐含的处理顺序。
我在没有阻塞主线程的情况下运行了很长时间,并等待结果继续。
对于 Task.Run 和 Task.Whenall 有一个关于多线程的新概念。这意味着我可以在一个新线程上启动一个长进程,并且它不会等待完成继续代码。代码在一个新线程上。在这个线程上,我可以等待方法。
所以如果我清楚地理解我决定对长进程使用异步等待,这意味着主线程上的执行顺序。
我使用 Task.run 让线程并行运行并独立处理。
这是好方法吗,我的理解好不好?
谢谢,
【问题讨论】:
【参考方案1】:您对async
/await
和Task.Run
的理解大多是正确的。
Task.Run
允许您轻松地在ThreadPool
线程上运行一些代码并避免阻塞当前线程。创建多个 Task
s 或使用 Parallel
类可以让您利用多个 CPU 内核更快地完成一些工作。
使用async
/await
时,您可以在任务完成后做一些工作。感谢SynchronizationContext
之后的代码await
可以在原始线程上执行,尽管并非总是如此。例如控制台应用程序没有SynchronizationContext
。
要记住的重要一点是async
/await
非常适合 I/O 密集型工作,而Task.Run
适合 CPU 密集型工作。这背后的原因是当您await
一些 I/O 绑定操作时,例如通过网络发送数据,您不会浪费任何线程来等待此类操作完成。你可以阅读更多关于here的信息。
【讨论】:
【参考方案2】:是的,Task.Run
方法是一种将工作卸载到后台线程的简单方法。工作线程由ThreadPool
类提供。了解一下这门课是个好主意,了解当池变得饥饿时会发生什么,以及如果您预计会发生这种情况,您可以做什么(主动使用SetMinThreads
是一种选择)。
使用Task.Run
比直接使用Thread
实例更方便。任务有一个强类型的Result
,有一个Exception
属性,可以是异步的awaited,可以是combined 与其他任务,并且可以被包装在具有额外功能的其他任务中(例如将任务包装在cancelable wrapper。
【讨论】:
以上是关于async await task.run xamarin 表单的主要内容,如果未能解决你的问题,请参考以下文章