控制台應用程式中的非同步呼叫:揭穿「向上」和「向下」神話
在C# 中,呼叫非同步方法時,人們普遍認為,必須在呼叫堆疊的「上」和「下」保持同步。然而,這個教條不適用於控制台應用程式。
考慮以下程式碼片段:
public static async Task<int> SumTwoOperationsAsync() { // Simulate time-consuming operations var firstTask = GetOperationOneAsync(); var secondTask = GetOperationTwoAsync(); // Sum the results of the operations return await firstTask + await secondTask; } private static async Task<int> GetOperationOneAsync() { await Task.Delay(500); // Simulating operation delay return 10; } private static async Task<int> GetOperationTwoAsync() { await Task.Delay(100); // Simulating operation delay return 5; }
根據「向上和向下」規則,標記 Main 函數似乎是合乎邏輯的,其中 SumTwoOperationsAsync 作為非同步呼叫。然而,這個假設是不正確的。控制台應用程式不支援非同步入口點。嘗試這樣做將導致編譯錯誤,指出「入口點無法使用『async』修飾符進行標記。」
那麼,我們如何在控制台應用程式中呼叫非同步程式碼呢?主要有兩種方法:
static void Main() { MainAsync().Wait(); // Alternatively, to avoid wrapping exceptions in AggregateException: // MainAsync().GetAwaiter().GetResult(); } static async Task MainAsync() { // Async code goes here }
static void Main() { AsyncContext.Run(() => MainAsync()); } static async Task MainAsync() { // Async code goes here }
有關非同步控制台應用程式的更全面的見解,請訪問提供的部落格文章。請記住,「上下」規則可能無法無縫適用於所有場景。
以上是如何在C#控制台應用程式中正確呼叫非同步程式碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!