控制台应用程序中的异步调用:揭穿“向上”和“向下”神话
在 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中文网其他相关文章!