日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用 Async 和 Await 的异步编程

發布時間:2023/12/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 Async 和 Await 的异步编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
來自:http://msdn.microsoft.com/library/vstudio/hh191443 異步對可能起阻止作用的活動(例如,應用程序訪問 Web 時)至關重要。?對 Web 資源的訪問有時很慢或會延遲。?如果此類活動在同步過程中受阻,則整個應用程序必須等待。?在異步過程中,應用程序可繼續執行不依賴 Web 資源的其他工作,直至潛在阻止任務完成。

下表顯示了異步編程提高響應能力的典型區域。?從 .NET Framework 4.5 和 Windows 運行時中列出的 API 包含支持異步編程的方法。

?

應用程序區域

包含異步方法的受支持的 API

Web 訪問

HttpClient?,SyndicationClient

使用文件

StorageFile、StreamWriter、StreamReader、XmlReader

使用圖像

MediaCapture、BitmapEncoder、BitmapDecoder

WCF 編程

同步和異步操作

??

由于所有與用戶界面相關的活動通常共享一個線程,因此,異步對訪問 UI 線程的應用程序來說尤為重要。?如果任何進程在同步應用程序中受阻,則所有進程都將受阻。?你的應用程序停止響應,因此,你可能在其等待過程中認為它已經失敗。

使用異步方法時,應用程序將繼續響應 UI。?例如,你可以調整窗口的大小或最小化窗口;如果你不希望等待應用程序結束,則可以將其關閉。

當設計異步操作時,該基于異步的方法將自動傳輸的等效對象添加到可從中選擇的選項列表中。?開發人員只需要投入較少的工作量即可使你獲取傳統異步編程的所有優點。

異步方法更容易編寫

Visual Basic 中的?Async?和?Await?關鍵字,以及 C# 中的?async?和?await?關鍵字都是異步編程的核心。?通過使用這兩個關鍵字,你可以使用 .NET framework 或 Windows 運行時中的資源輕松創建異步方法(幾乎與創建同步方法一樣輕松)。?通過使用被稱為異步方法的 async 和 await 定義的異步方法。

下面的示例演示了一種異步方法。?你應對代碼中的幾乎所有內容都非常熟悉。?注釋調出你添加的用來創建異步的功能。

? // Three things to note in the signature: // - The method has an async modifier. // - The return type is Task or Task<T>. (See "Return Types" section.) // Here, it is Task<int> because the return statement returns an integer. // - The method name ends in "Async." async Task<int> AccessTheWebAsync() { // You need to add a reference to System.Net.Http to declare client.HttpClient client = new HttpClient();// GetStringAsync returns a Task<string>. That means that when you await the// task you'll get a string (urlContents).Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");// You can do work here that doesn't rely on the string from GetStringAsync. DoIndependentWork();// The await operator suspends AccessTheWebAsync.// - AccessTheWebAsync can't continue until getStringTask is complete.// - Meanwhile, control returns to the caller of AccessTheWebAsync.// - Control resumes here when getStringTask is complete. // - The await operator then retrieves the string result from getStringTask.string urlContents = await getStringTask;// The return statement specifies an integer result.// Any methods that are awaiting AccessTheWebAsync retrieve the length value.return urlContents.Length; }

?

如果?AccessTheWebAsync?在調用?GetStringAsync?和等待其完成期間不能進行任何工作,則你可以通過在下面的單個語句中調用和等待來簡化代碼。

?

API 異步方法 你可能想知道從何處可以找到?GetStringAsync?等支持異步編程的方法。?.NET Framework 4.5 包含使用 async 和 await 的許多成員。?可以通過附加到成員名稱的“Async”后綴和?Task或?Task<TResult>?的返回類型識別這些成員。?例如,System.IO.Stream 類包含的方法?CopyToAsync、ReadAsync、WriteAsync?等方法以及同步方法?CopyTo、Read?和?Write。

?

線程 ? ? ? 如果通過使用?Async?或?async?修飾符指定某種方法為異步方法,則可以啟用以下兩個功能。
  • 標記的異步方法可以使用?Await?或?await?來指定懸掛點。?await 運算符通知編譯器異步方法只有直到等待的異步過程完成才能繼續通過該點。?同時,控件返回至異步方法的調用方。

    await 表達式中異步方法的掛起不能使該方法退出,并且?finally?塊不會運行。

  • 標記的異步方法本身可以通過調用它的方法等待。

異步方法通常包含 await 運算符的一個或多個匹配項,但缺少 await 表達式不會導致編譯器錯誤。?如果異步方法未使用 await 運算符標記懸掛點,則該方法將作為同步方法執行,不管異步修飾符如何。?編譯器將為此類方法發布一個警告。

Async?、async、Await?和?await?都是上下文關鍵字。?

轉載于:https://www.cnblogs.com/zuiyirenjian/p/4187601.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的使用 Async 和 Await 的异步编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。