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
.
注意:
StringBuilder
是不是线程安全的:.NET的StringBuilder线程安全
==>你应该lock
在ContinueWith
正如Matías所指出的那样:您还应检查任务是否成功完成
归档时间: |
|
查看次数: |
1488 次 |
最近记录: |