如何解决C#-可以并行运行多个任务吗?
所有工作完成后,我的字符串为空。有什么解决办法吗?
string jsonString = "";
List<Task> tasksToWait = new List<Task>();
// ...
foreach (string blah in blahs)
{
counter++;
// ...
Task task = new Task(async () =>
{
HttpResponseMessage response = await client.GetAsync(baseURL + URLparams);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
jsonString += responseBody + ",";
});
task.Start();
tasksToWait.Add(task);
if (counter == 50)
{
Task.WaitAll(tasksToWait.ToArray());
tasksToWait.Clear();
Console.WriteLine(jsonString);
}
// ...
}
为了加快速度,我立即启动多个API请求,而不是一次等待一个。打开其他选项/解决方案。
谢谢!
解决方法
我建议创建任务,然后await
用Task.WhenAll
将它们全部使用,然后使用string.Join
它们的顺序与列表中的顺序相同。
如果所有任务均未发生故障且所有任务均未取消,则 结果任务将以RanToCompletion状态结束。的结果 返回的任务将设置为包含所有 所提供任务的结果与提供的顺序相同
public async Task<string> DoStuff(string data)
{
var response = await _client.GetAsync("");
response.EnsureSuccessStatusCode();
...
return await response.Content.ReadAsStringAsync();
}
用法
var blahs = new List<string>();
var results = await Task.WhenAll(blahs.Select(DoStuff));
Console.WriteLine(string.Join(",",results));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。