期待异步等待线程
本文关键字:线程 等待 异步 期待 | 更新日期: 2023-09-27 18:17:38
i有以下代码:
static void Main(string[] args)
{
Run1();
Run2().Wait();
}
static async Task DoAsyncWork()
{
await Task.Delay(2000);
}
static async Task Run2()
{
var tid = Thread.CurrentThread.ManagedThreadId;
await DoAsyncWork();
Console.WriteLine(tid == Thread.CurrentThread.ManagedThreadId);
}
static void Run1()
{
var tid = Thread.CurrentThread.ManagedThreadId;
DoAsyncWork().Wait();
Console.WriteLine(tid == Thread.CurrentThread.ManagedThreadId);
}
输出:
有时为真,有时为假。
真正假
假 真正- 真正
- 真正
我认为3是正确的答案,但是当我运行代码时,我得到:
真正假
我知道为什么第一次打印是真的,但任何人都可以解释我为什么当我运行代码总是我得到假?(如何在第二版中得到True ?)
谢谢!
控制台应用程序没有同步上下文,因此await
无法返回到前一个线程。这就是为什么你在Run2
中看到一个不同的线程id。