C# 中控制台應用程式的非同步程式設計
在C# 程式設計領域,使用'async' 關鍵字的非同步程式設計模型提供了高效的透過在等待長時間運行的操作完成時避免線程阻塞來執行。然而,控制台應用程式在整合此模型時提出了挑戰。
非同步主函數的困境
在同步程式設計中,傳播「非同步」至關重要' 關鍵字貫穿整個呼叫堆疊,從入口點到非同步程式碼。然而,在控制台應用程式中,由於編譯錯誤,入口點(Main 函數)無法標記為非同步。
克服限制
主要有兩種方法要解決此限制:
1.阻止執行:
這涉及阻塞主線程,直到非同步操作完成。實現此目的的一種方法是在傳回的任務上利用「Wait」方法:
static void Main() { MainAsync().Wait(); }
但是,這種方法可能會導致異常被包裝到 AggregateException 中。為了避免這種情況,請考慮使用GetAwaiter().GetResult() 方法:
static void Main() { MainAsync().GetAwaiter().GetResult(); }
2.使用您自己的上下文:
或者,您使用您自己的上下文:
static void Main() { AsyncContext.Run(() => MainAsync()); }
或者,您可以建立自訂非同步上下文來管理非同步執行。這允許您將入口點與非同步程式碼分開:
這種方法提供了一種強大的機制來處理控制台應用程式中的非同步操作。以上是如何在 C# 控制台應用程式中有效地使用 Async/Await?的詳細內容。更多資訊請關注PHP中文網其他相關文章!