![](/img/trans.png)
[英]Task.Run( () MethodName()) and await Task.Run(async () => MethodName())
[英]async await task.run xamarin forms
我只是想確保我能很好地理解 async await 和 Task.run 或 Task.whenall 之間的區別
所以async await就是處理異步方法。 這意味着有一個隱含的處理順序。
我在不阻塞主線程的情況下運行了長時間的處理,並等待結果繼續。
對於 Task.Run 和 Task.Whenall 有一個多線程的新概念。 這意味着我可以在一個新線程上啟動一個長進程,並且它不會等待完成繼續代碼。 代碼在一個新線程上。 在這個線程上,我可以等待方法。
因此,如果我清楚地理解我決定對長進程使用異步等待,這意味着主線程上的執行順序。
我使用 Task.run 讓線程並行運行並獨立處理。
這是好方法嗎?我的理解好不好?
謝謝,
您對async
/ await
和Task.Run
的理解大多是正確的。
Task.Run
允許您輕松地在ThreadPool
線程上運行一些代碼並避免阻塞當前線程。 創建多個Task
或使用Parallel
class 允許您利用多個 CPU 內核來更快地完成一些工作。
使用async
/ await
時,您可以在任務完成后做一些工作。 感謝SynchronizationContext
代碼await
之后可以在原始線程上執行,盡管並非總是如此。 例如控制台應用程序沒有SynchronizationContext
。
要記住的一件重要事情是async
/ await
非常適合 I/O 綁定工作,而Task.Run
適合 CPU 綁定工作。 這背后的原因是,當您await
一些 I/O 綁定操作時,例如通過網絡發送數據,您不會浪費任何線程來等待此類操作完成。 您可以在此處閱讀更多相關信息。
是的, Task.Run
方法是一種將工作卸載到后台線程的簡單方法。 工作線程由ThreadPool
class 提供。 了解一下這個 class 是一個好主意,了解當池變得飢餓時會發生什么,以及如果您預計會發生這種情況,您可以做什么(主動使用SetMinThreads
是一種選擇)。
使用Task.Run
比直接使用Thread
實例更方便。 任務具有強類型的Result
,具有Exception
屬性,可以異步等待,可以與其他任務組合,並且可以包裝在具有額外功能的其他任務中(例如將任務包裝在可取消的包裝器中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.