異步和等待:拆開異步編程
>現代編程在很大程度上依賴於使用async
和await
的異步操作。 在提高代碼可讀性的同時,這些關鍵字引入了通常需要進一步解釋的複雜性。 一個常見的誤解是,async
和await
為冗長的過程創建新的背景線程。
現實更加細微。 async
和await
管理異步任務,但它們沒有直接產生線程。 相反,他們利用了另一種方法。 編譯器遇到async
方法時,編譯器會在場景後面生成狀態計算機。
讓我們用一個示例說明:
private async void button1_Click(object sender, EventArgs e) { Task<int> access = DoSomethingAsync(); // Other independent tasks here int a = 1; // Immediately accessible // Wait for the result of DoSomethingAsync() int x = await access; } async Task<int> DoSomethingAsync() { // Does this run on a background thread? System.Threading.Thread.Sleep(5000); return 1; }
>在這裡,await
>指示編譯器暫停button1_Click
,直到DoSomethingAsync
完成為止。 任務完成後,執行恢復,允許立即訪問a
>。
不在專用的背景線程上運行。 編譯器的狀態計算機在線程池線程上不同步。 這意味著未預定的執行環境;它可以在任何可用的線程池線程上運行。 DoSomethingAsync
DoSomethingAsync
掌握
之間的相互作用對於創建有效,可擴展的異步代碼至關重要。 這種機制允許長期運行的操作而不會阻止主線程,從而帶來更快且流暢的用戶體驗。
以上是``async''和`等待在異步編程中創建背景線程嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!