异步等待任务。运行xamarin形式

时间:2020-04-19 13:39:05

标签: c# xamarin.forms async-await task-parallel-library

我只是想确保我很好地理解异步等待与Task.run或Task.whenall之间的区别

所以异步等待就是处理异步方法。这意味着暗含处理顺序。

我在不阻塞主线程的情况下进行了很长的处理,然后等待结果继续。

对于Task.Run和Task.Whenall,有一个新的多线程概念。这意味着我可以在一个新线程上启动一个长进程,而无需等待完成即可继续执行代码。该代码在新线程上。然后我可以在此线程上等待方法。

因此,如果我清楚理解的话,我决定对长进程使用异步等待,这意味着在主线程上执行顺序。

我将Task.run用于线程以并行运行并独立处理。

这是好方法吗,我的理解很好吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您对async / awaitTask.Run的理解基本上是正确的。

Task.Run使您可以轻松地在ThreadPool线程上运行一些代码,并避免阻塞当前线程。创建多个Task或使用Parallel类使您可以利用多个CPU内核来更快地完成一些工作。

使用async / await时,您可以在任务完成后做一些工作。由于await之后的SynchronizationContext代码可以在原始线程上执行,尽管并非总是如此。例如,控制台应用程序没有SynchronizationContext

要记住的重要一件事是async / await对于I / O绑定工作非常有用,而Task.Run对于CPU绑定工作很好。这背后的原因是,当您await执行某些I / O绑定操作(例如通过网络发送数据)时,您不会在等待此类操作完成时浪费任何线程。您可以了解有关here的更多信息。

答案 1 :(得分:0)

是的,Task.Run方法是一种将工作卸载到后台线程的简便方法。工作线程由ThreadPool类提供。学习一些有关此类的知识是个好主意,知道池中的资源不足时会发生什么,以及如果您预计会发生这种情况(可以主动使用SetMinThreads),该怎么办。

使用Task.Run比直接使用Thread实例更方便。任务具有强类型的Result,具有Exception属性,可以awaited异步,可以与其他任务combined并可以包含在其他任务中,并具有额外的功能功能(例如,将任务包装在cancelable wrapper中。