gpt4 book ai didi

c# - 使用 async/await 重写多线程等待

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

我们有一个在后台运行任务列表的网络服务功能。当所有任务完成时,它返回。我已经重新访问了 C# 5 的函数。我已经设法使以下代码片段正常工作:

var result = new List<int>();
var tasks = new List<Task<int>>();

foreach (var row in rowlist)
tasks.Add(Task.Factory.StartNew(() => DoWork(row)));
foreach (var task in tasks)
result.Add(task.Result);

task.Result 等待完成单个任务。我已经通过向 DoWork 方法添加三秒延迟并验证它在 5 秒内完成来测试这一点,用于 10 个任务的列表。

现在我尝试使用新的 async/await 语法重写函数。但我似乎无法让它发挥作用。如果它编译,它会同步运行,通过添加等待来验证。

关于如何使用 async/await 重写上述代码段有什么想法吗?

最佳答案

我会这样写:

var tasks = rowlist.Select(row => Task.Run(() => DoWork(row)));

var results = (await Task.WhenAll(tasks)).ToList();

基本上,您仍然按照以前的方式创建任务(不使用 await),因为您希望它们全部立即开始。然后,您可以等待它们全部异步完成(通过 await Task.WhenAll),然后立即取出结果(因为您知道它们都已完成)。

关于c# - 使用 async/await 重写多线程等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12714717/

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