首页 > 后端开发 > C++ > 如何在C#控制台应用程序中正确调用异步代码?

如何在C#控制台应用程序中正确调用异步代码?

Mary-Kate Olsen
发布: 2025-01-05 15:49:45
原创
172 人浏览过

How Do I Properly Invoke Asynchronous Code in C# Console Applications?

控制台应用程序中的异步调用:揭穿“向上”和“向下”神话

在 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’修饰符进行标记。”

那么,我们如何在控制台应用程序中调用异步代码呢?主要有两种方法:

  1. 使用 Wait 或 GetAwaiter().GetResult(): 此方法同步等待 SumTwoOperationsAsync 返回的任务。
static void Main()
{
  MainAsync().Wait();
  // Alternatively, to avoid wrapping exceptions in AggregateException:
  // MainAsync().GetAwaiter().GetResult();
}

static async Task MainAsync()
{
  // Async code goes here
}
登录后复制
  1. 使用自定义Context:您可以创建自己的上下文来调用异步方法。这种方法提供了更多的控制和错误处理功能。
static void Main()
{
  AsyncContext.Run(() => MainAsync());
}

static async Task MainAsync()
{
  // Async code goes here
}
登录后复制

有关异步控制台应用程序的更全面的见解,请访问提供的博客文章。请记住,“上下”规则可能无法无缝适用于所有场景。

以上是如何在C#控制台应用程序中正确调用异步代码?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板