gpt4 book ai didi

c# - 异步 - 等待 - 预期线程

转载 作者:行者123 更新时间:2023-11-30 14:24:52 26 4
gpt4 key购买 nike

我有以下代码:

  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,但是任何人都可以解释为什么当我运行代码时总是得到 False? (我怎样才能在第二次打印时得到 True?)

谢谢!

最佳答案

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

您可以阅读更多相关信息 here .

关于c# - 异步 - 等待 - 预期线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40577858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com