期待异步等待线程

本文关键字:线程 等待 异步 期待 | 更新日期: 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);
    }

输出:

  1. 有时为真,有时为假。

    真正

  2. 真正
  3. 真正
  4. 真正

我认为3是正确的答案,但是当我运行代码时,我得到:

真正

我知道为什么第一次打印是真的,但任何人都可以解释我为什么当我运行代码总是我得到假?(如何在第二版中得到True ?)

谢谢!

期待异步等待线程

控制台应用程序没有同步上下文,因此await无法返回到前一个线程。这就是为什么你在Run2中看到一个不同的线程id。