簡體   English   中英

C# - 多個任務可以並行運行 append 到一個字符串嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM