我是任务新手,所以我决定在这里写一个简单的方法
static async Task Work()
{
Console.WriteLine("download started");
await Task.Run(async () => {
for (var i = 0; i < 10; i++)
{
Console.WriteLine($"{i}: is downloading");
await Task.Delay(1000);
}
});
Console.WriteLine("done");
}
在这里打电话
static void Main()
{
Work();
}
这里的问题是输出
预期输出:
starting
1
2
...
9
done
实际输出:
download started
0: is downloading
我假设这个简单的场景有一个重复的帖子,但我找不到它......
控制台应用程序中的主线程是特殊的。由于它是唯一的前台线程,因此当它退出时,整个应用程序都会退出。
如果使用的是 C# 7.1 或更高版本,则可以指定如下async Task Main
方法:
static async Task Main()
{
await Work();
}
在后台,这将阻塞您的主线程,直到操作完成。对于旧版本的 C#,您可以自己执行此操作:
static void Main()
{
Work().GetAwaiter().GetResult();
}
通常,您不希望阻止异步代码;控制台应用程序的Main
方法是此规则的例外。