在我專案的代碼庫中,我看到很多方法可以歸結為以下代碼:
在我專案的代碼庫中,我看到很多方法可以歸結為以下代碼:
public async Task< bool> MyAsyncFunction(string filePath)
{
byte[] fileBytes = await File.ReadAllBytesAsync(filePath)。
bool succeeded = await UploadFileSomewhereAsync(fileBytes);
return succeeded;
我理解async/await對于前端代碼中的非阻塞UI任務很有用。我還了解到,async/await可用于并行運行某些任務,如下面的代碼:
public async Task< bool> MyAsyncFunction(string filePath)
{
Task<byte[]> fileBytesTask = File.ReadAllBytesAsync(filePath)。
//do some other work that does not need the file byte array.
byte[] fileBytes = await fileBytesTask;
bool succeeded = await UploadFileSomewhereAsync(fileBytes)。
return succeeded;
然而,在第一個例子中,async/await模式有什么用?與簡單呼叫這些方法的同步版本相比,撰寫這樣的代碼有什么好處嗎?我是不是錯過了什么?
uj5u.com熱心網友回復:
我想對Stephen Clearys的評論做一些擴展
異步代碼有兩個主要的使用情況。- 對于UI應用程式,您不希望在做一些緩慢的IO操作時凍結您的UI,比如讀取一個大檔案,或者做一些行程密集的操作。
- 對于服務器應用程式,您不希望在等待慢速IO操作時消耗一個執行緒。許多服務器是相當簡單的資料庫的前端。如果你有1000個并發查詢并使用同步代碼,你可能需要1000個只是在等待的執行緒。執行緒會使用一些資源,如記憶體,當試圖為大量并發用戶提供服務時,這就會變得很浪費。
老式的做寫異步代碼的風格有點難用,因為你需要手動跟蹤IO操作完成后需要做的一切。Async/awaits 在很大程度上避免了這一點,它讓編譯器完成困難的部分,讓你寫的代碼看起來像普通的順序代碼。
針對async/await的批評意見是,有時使用同步方法會更好。因此,您可能需要撰寫兩個版本的基本相同的代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/318028.html
標籤:
