从async方法向StringBuilder添加字符串

Hoo*_*och 10 .net c# string asynchronous task

我有async方法返回字符串(来自web).

async Task<string> GetMyDataAsync(int dataId);
Run Code Online (Sandbox Code Playgroud)

我有:

Task<string>[] tasks = new Task<string>[max];
for (int i = 0; i < max; i++)
{
    tasks[i] = GetMyDataAsync(i);
}
Run Code Online (Sandbox Code Playgroud)

如何将每个任务的结果追加到StringBuilder

我想知道怎么做

A)按任务创建顺序

B)为了完成任务

我该怎么做?

Chr*_*Fin 13

A)按任务创建顺序

Task<string>[] tasks = new Task<string>()[max];
for (int i = 0; i < max; i++)
{
    tasks[i] = GetMyDataAsync(i);
}
Task.WaitAll(tasks);
foreach(var task in tasks)
    stringBuilder.Append(task.Result);
Run Code Online (Sandbox Code Playgroud)

B)为了完成任务

Task<string>[] tasks = new Task<string>()[max];
for (int i = 0; i < max; i++)
{
    tasks[i] = GetMyDataAsync(i).ContinueWith(t => stringBuilder.Append(t.Result));
}
Task.WaitAll(tasks);
Run Code Online (Sandbox Code Playgroud)

如果你在一个async方法内,你也可以使用await Task.WhenAll(tasks)而不是Task.WaitAll.

注意:

  1. StringBuilder是不是线程安全的:.NET的StringBuilder线程安全 ==>你应该lockContinueWith

  2. 正如Matías所指出的那样:您还应检查任务是否成功完成