[英]C# - Can multiple tasks running in parallel append to a string?
完成所有工作后,我的字符串為空。 有什么解決辦法嗎?
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 請求,而不是一次等待一個。 打開其他選項/解決方案。
謝謝!
我建議創建任務,然后使用string.Join
將它們全部await
,然后使用Task.WhenAll
它們的順序與它們在列表中的順序相同。
如果沒有任務出錯並且沒有任務被取消,則生成的任務將在 RanToCompletion state 中結束。 返回任務的 Result 將設置為一個數組,其中包含所提供任務的所有結果,其順序與提供的順序相同
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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.