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/awaitTask.Run 的理解大多是正确的。

Task.Run 允许您轻松地在ThreadPool 线程上运行一些代码并避免阻塞当前线程。创建多个 Tasks 或使用 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 表单的主要内容,如果未能解决你的问题,请参考以下文章

正确使用 Task.Run 和 async-await 时

async await task.run xamarin 表单

基于任务的异步编程(Task,async,await)

async 和 await 之本质

C# 异步操作 async await 的用法

async中await是干啥的,用不用有什么区别?