gpt4 book ai didi

C# async 函数作为 Task

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

在下面的代码中:

async static Task<int> test(){ 
Console.WriteLine("{0}: Start 3", DateTime.Now);
await Task.Delay(3000);
return 3;
}

List<Task<int>> tasks2 = new List<Task<int>> {
test(),
new Task<int>( delegate { Console.WriteLine("{0}: Start 3", DateTime.Now); Task.Delay(3000).Wait(); return 3; } ),
new Task<int>( delegate { Console.WriteLine("{0}: Start 1", DateTime.Now); Task.Delay(1000).Wait(); return 1; } ),
};


foreach (var task in tasks2)
task.Start(); // this cause exception at runtime

为什么我不能使用 test方法为 Task<int> ?如果函数返回 Task<int> ...

最佳答案

当您调用test() 时,test() 返回的任务已经开始。所以你不能重新启动它。

实际上,test() 返回的任务是一个 promise 风格的任务,它首先不在线程池线程上运行。

您几乎应该总是创建已经开始的任务(一旦创建)。

即,您不应该使用 Task 的构造函数,然后调用 Start 方法。

相反,如果您想在线程池线程上运行任务,请使用 Task.Run .

关于C# async 函数作为 Task<int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34910015/

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