gpt4 book ai didi

c# - 异步方法和竞争条件

转载 作者:太空宇宙 更新时间:2023-11-03 12:22:04 25 4
gpt4 key购买 nike

<分区>

异步 hive 思维:考虑一下

private static async Task A()
{
await DelayOneSecond();
await DelayOneSecond();
await DelayOneSecond();
}

private static async Task B()
{
await Task.WhenAll(DelayOneSecond(), DelayOneSecond(), DelayOneSecond());
}

private static Task DelayOneSecond() => Task.Delay(1000);

哪个方法会先完成? A、B 还是同时?

同时运行它们的代码丢失了,但想象一下那里有那个位。

我最初的回答是 await 不是阻塞操作,并且基于类似的回答 here ,这两个是相似的,不同之处在于 WhenAll 一次传播所有异常,这样更容易不丢失异常,而且如果其中一个方法抛出异常,WhenAll 也不会立即返回。

然而后来我被告知答案是 B,B 将首先完成,因为它并行运行它们。 A 将一个接一个地运行它们,等待每个完成,然后再继续下一个。我还被告知:Await 是非阻塞的,它将控制权交还给调用者,该方法的其余部分被设置为延续,因此一直执行到等待的调用完成为止。

我一直在尝试查找有关此行为的更多信息,因为我曾假设多个等待会以相同的方式工作。有人可以对答案给出更多解释

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