【发布时间】:2018-12-15 18:29:21
【问题描述】:
我正在阅读我的 C# 书中关于 await 和 async 关键字的一章。 主要讲解这几种方法调用,调用者使用await关键字等待被调用方法完成。
在这个简单的示例中,我没有看到任何优势,但更重要的是,这 3 个调用没有区别。谁能解释它对应用程序流程有什么影响?只有当调用线程是主GUI线程时才有用吗?
static async Task Main(string[] args)
{
WriteText();
await WriteTextAsync();
WriteTextAsync().Wait();
}
static void WriteText()
{
Thread.Sleep(3_000);
Console.WriteLine("Hello");
}
static async Task WriteTextAsync()
{
await Task.Run(() =>
{
Thread.Sleep(3_000);
Console.WriteLine("Hello");
});
}
Ps:如果方法的调用线程无论如何都在等待方法完成,那还不如正常调用?
【问题讨论】:
-
那位作者懒得把线程 ID 作为
Console.WriteLine的一部分打印出来,因为这样你几乎可以立即看到差异。 -
@LexLi 除此之外,我认为仅在控制台中使用 Thread.Sleep 并不足以显示实际增加的优势。另外,用
Task.Run调用Thread.Sleep?不是我最喜欢的例子…… -
@CamiloTerevinto 我同意。 async/await 从来都不是一个容易掌握的概念,糟糕的例子可能会产生误导。
-
这只是一个坏例子。它可以教你一些关于“如何”的知识,但不能教你关于事情的“为什么”。继续阅读或寻找更好的来源。
-
特别是你给定的例子不会得到
sync-await的好处。
标签: c# asynchronous async-await