gpt4 book ai didi

C# 任务在 Task.WhenAll 之前执行

转载 作者:太空狗 更新时间:2023-10-29 23:59:49 27 4
gpt4 key购买 nike

为什么任务Task.WhenAll之前执行??

如果你看到这里,从下面的代码片段中,首先 Console.WriteLine("This should be write first.."); 应该被打印出来,因为我正在等待 它下面的任务..

但是如果你看到输出结果,Tasks 方法的结果会在上面的语句之前被打印出来。理想情况下,任务方法应该在我 await 它们时执行,但似乎-任务方法是在我将它们添加到任务列表时执行的。为什么会这样?

你能告诉我为什么会这样吗??

代码:

public static async Task Test()
{
var tasks = new List<Task>();

tasks.Add(PrintNumber(1));
tasks.Add(PrintNumber(2));
tasks.Add(PrintNumber(3));

Console.WriteLine("This should be written first..");

// This should be printed last..
await Task.WhenAll(tasks);
}

public static async Task PrintNumber(int number)
{
await Task.FromResult(0);

Console.WriteLine(number);
}

输出

enter image description here

最佳答案

当您调用 async 方法时,您会得到一个“热”任务作为返回。这意味着在您到达 await 之前任务已经开始运行(甚至可能完成)。这意味着任务很有可能在调用 Task.WhenAll 之前运行并完成。

然而,在您的情况下,虽然 PrintNumber 被标记为 async 它根本不是异步的,因为您使用的是 Task.FromResult .异步方法的同步部分(等待异步任务之前的部分)始终在调用线程上同步执行,并在调用返回之前完成。当您使用 Task.FromResult 时,您会得到一个已完成的任务,因此您的所有方法都只是同步部分,并在调用返回之前完成。

关于C# 任务在 Task.WhenAll 之前执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27290555/

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