You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中Async/Await未按预期运行,程序提前终止问题排查

问题分析与解决

你的代码核心问题是程序入口Main方法调用异步方法Method1时没有等待其执行完成。由于Main是同步方法,调用Method1()后会直接执行后续逻辑(此处无后续代码),主线程随即退出,所有未完成的异步任务会被强制终止,导致Method2还没开始执行程序就结束了。

解决方案

从C# 7.1开始,Main方法支持异步写法,直接将其改为异步并等待Method1完成即可:

static async Task Main(string[] args)
{
    await Method1();
}

static int Method2(int x)
{
    for (int i = 0; i < 10; i++)
    {
        x += 1;
        Console.WriteLine(x);
        Thread.Sleep(200);
    }
    Console.WriteLine("final" + " " + x + " " + Thread.CurrentThread.ManagedThreadId);
    return x;
}

static async Task Method1()
{
    Console.WriteLine("1 running");
    int result1 = await Task.Run(() => Method2(0));
    int result2 = await Task.Run(() => Method2(result1));
    Thread.Sleep(1000);
    Console.WriteLine("result " + result2 * 2);
}

兼容旧版本的替代方案

如果你的项目不支持C# 7.1及以上版本,可以在同步Main方法中阻塞等待异步任务完成(不推荐,但可临时解决问题):

static void Main(string[] args)
{
    Method1().Wait(); // 或者 Method1().GetAwaiter().GetResult();
}

内容的提问来源于stack exchange,提问作者mhtaaghi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:25:21