gpt4 book ai didi

c# - 带参数的任务列表

转载 作者:太空宇宙 更新时间:2023-11-03 21:23:53 28 4
gpt4 key购买 nike

我需要创建一个任务列表来执行一个带有一个参数的例程,然后等待这些任务完成,然后再继续其余的程序代码。这是一个例子:

List<Task> tasks = new List<Task>();
foreach (string URL in LIST_URL_COLLECTION)
{
tasks[i] = Task.Factory.StartNew(
GoToURL(URL)
);
}
//wait for them to finish
Console.WriteLine("Done");

我已经用谷歌搜索并搜索了这个网站,但我一直走到死胡同,我做过一次,但不记得是怎么做的。

最佳答案

Task Parallel Library通过 Task.WhenAll 公开了一种异步等待所有任务完成的便捷方式方法。该方法返回 Task本身是可等待的,应该被等待:

public async Task QueryUrlsAsync()
{
var urlFetchingTasks = ListUrlCollection.Select(url => Task.Run(url));
await Task.WhenAll(urlFetchingTasks);
Console.WriteLine("Done");
}

注意为了await ,您的方法必须标有 async方法签名中的修饰符并返回 Task (如果它没有返回值)或 Task<T> (如果它确实有返回值,则类型为 T )。

作为旁注,您的方法看起来像是在获取 url,我假设它正在生成对某个端点的 web 请求。为此,无需通过 Task.Factory.StartNew 使用额外线程或 Task.Run ,因为这些操作自然是异步的。你应该看看 HttpClient 作为起点。例如,您的方法可能如下所示:

public async Task QueryUrlsAsync()
{
var urlFetchingTasks = ListUrlCollection.Select(url =>
{
var httpClient = new HttpClient();
return httpClient.GetAsync(url);
});

await Task.WhenAll(urlFetchingTasks);
Console.WriteLine("Done");
}

关于c# - 带参数的任务列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28660327/

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