簡體   English   中英

異步等待任務。運行 xamarin forms

[英]async await task.run xamarin forms

我只是想確保我能很好地理解 async await 和 Task.run 或 Task.whenall 之間的區別

所以async await就是處理異步方法。 這意味着有一個隱含的處理順序。

我在不阻塞主線程的情況下運行了長時間的處理,並等待結果繼續。

對於 Task.Run 和 Task.Whenall 有一個多線程的新概念。 這意味着我可以在一個新線程上啟動一個長進程,並且它不會等待完成繼續代碼。 代碼在一個新線程上。 在這個線程上,我可以等待方法。

因此,如果我清楚地理解我決定對長進程使用異步等待,這意味着主線程上的執行順序。

我使用 Task.run 讓線程並行運行並獨立處理。

這是好方法嗎?我的理解好不好?

謝謝,

您對async / awaitTask.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM