问题描述
所有工作完成后,我的字符串为空。有什么解决办法吗?
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));