[.NET] 利用 async & await 進行非同步 IO 操作(整理中...)

來源:互聯網
上載者:User

標籤:private   延遲   建議   伸縮性   tar   系統   fast   abi   each   

利用 async & await 進行非同步 IO 操作

  可以使用非同步函數訪問檔案。使用非同步功能,可以調用非同步方法呼叫,而不使用回調或拆分您在多個方法或 lambda 運算式中的代碼。 若要使同步代碼非同步,則調用非同步方法呼叫而不是一個同步方法並添加幾個關鍵字到代碼中。

  您可能認為添加的以下原因 asynchrony 到檔案訪問調用:

  • Asynchrony 建議於應用程式的響應能力更強。,因為是一個操作的 UI 線程可以執行其他工作。 如果 UI 線程必須執行需要很長時間的代碼(例如,超過 50 毫秒),UI 可以凍結,直到 I/O 完成的,並且使用介面執行緒可以重新處理鍵盤和滑鼠輸入和其他動作。

  • Asynchrony 通過減少對線程的需要增強 ASP.NET 和其他的延展性基於伺服器的應用程式。 如果應用程式使用專用線程上每個響應,並且一次兩個請求同時處理,則有線程是必需的。 在等待期間,非同步作業通常不需要使用線程。 它們簡要使用現有的 I/O 完成線程在末尾。

  • 檔案訪問操作的延遲可能非常低在當前情況,但是,延遲在以後可能會大大提高。 例如,檔案可能會移至位於 the world 的伺服器。

  • 添加的開銷使用非同步功能很小。

  • 非同步任務可以並行輕鬆地運行。

 

對 FileStream 選件類的使用

  本主題中的樣本使用 FileStream 選件類,它具有一個選項導致非同步 I/O 發生在作業系統層級。 使用此選項,您可以避免在許多情況下阻止線程池線程。 若要啟用此選項,則指定 useAsync=true 或在建構函式中 options=FileOptions.Asynchronous 參數調用。

  不能對 StreamReader 和 StreamWriter 的此選項,如果直接通過指定檔案路徑開啟這些檔案。 但是,您可以使用此選項,則提供自己 FileStream選件類開啟的 Stream。 請注意,非同步呼叫是比在 UI app,即使線程池線程阻塞,在等待期間,因為使用介面執行緒未阻止。

 

編寫文本

  下面的樣本寫入文本到檔案。 在每個請等待語句,則此方法會立即退出。 當檔案 I/O 完成時,方法以等待語句後面的語句。 請注意"修飾符在使用等待語句方法的定義。

 1         /// <summary> 2         /// 非同步寫入檔案 3         /// </summary> 4         /// <returns></returns> 5         private async Task WriteTextAsync() 6         { 7             var path = $"temp.txt"; 8             var content = Guid.NewGuid().ToString(); 9 10             using (var fs = new FileStream(path,11                 FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None, bufferSize: 4096, useAsync: true))12             {13                 var buffer = Encoding.UTF8.GetBytes(content);14 15                 //var writeTask = fs.WriteAsync(buffer, 0, buffer.Length);16                 //await writeTask;17                 await fs.WriteAsync(buffer, 0, buffer.Length);18             }19         }

  行號 17 的語句可以修改為:

1   //await fs.WriteAsync(buffer, 0, buffer.Length);2   //可以改為3   var writeTask = fs.WriteAsync(buffer, 0, buffer.Length);4   await writeTask;

  第一個語句(行號 1)返回任務並導致進程的檔案。 使用等待的第二個語句(行號3、4)導致方法立即退出並返回其他任務。 當隨後處理的檔案完成時,執行回 await 的語句。 

[.NET] 利用 async & await 進行非同步 IO 操作(整理中...)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.