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

如何在C#中正确使用Task.Delay()?求助解决未等待错误及输出异常

问题原因与解决方案

嗨,我来帮你搞定这个问题~

你遇到的核心问题是在同步的Main方法里调用了异步方法,却没有等待它执行完成。编译器的警告其实已经点出了关键:你调用Delay()后没有用await或者Wait()来等待任务结束,所以Main方法会直接继续执行到末尾,程序就提前退出了,自然看不到每秒打印数字的效果。

下面给你两种可行的解决方案:

方案1:使用异步Main方法(推荐,C# 7.1+支持)

从C# 7.1开始,我们可以把Main方法声明为async Task,这样就能直接用await等待异步任务完成,这是最符合异步编程规范的做法:

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

static async Task Delay() 
{
    for (int i = 0; i < 5; i++) 
    {
        Console.WriteLine(i);
        await Task.Delay(1000);
    }
}

方案2:阻塞等待任务完成(兼容低版本C#)

如果你的项目不能使用异步Main,可以在Main里调用Wait()方法,让主线程阻塞直到Delay()任务执行完毕:

static public void Main(string[] args) 
{ 
    Delay().Wait(); 
}

static async Task Delay() 
{
    for (int i = 0; i < 5; i++) 
    {
        Console.WriteLine(i);
        await Task.Delay(1000);
    }
}

注意:Wait()在控制台程序里不会有太大问题,但在UI程序或ASP.NET等场景下可能导致死锁,所以优先推荐方案1。

这样修改后,程序就会按预期每秒打印一个数字,直到循环执行完毕才会退出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 06:42:34