gpt4 book ai didi

c# - 从异步方法将字符串添加到 StringBuilder

转载 作者:可可西里 更新时间:2023-11-01 09:05:12 27 4
gpt4 key购买 nike

我有返回字符串的异步方法(来自网络)。

async Task<string> GetMyDataAsync(int dataId);

我有:

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

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

我想知道怎么做

A) 按照任务创建的顺序

B) 为了完成任务

我该怎么做?

最佳答案

A) In order of task creation

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);

B) In order that tasks finish

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);

如果您在 async 方法中,您还可以使用 await Task.WhenAll(tasks) 而不是 Task.WaitAll

注意:

  1. StringBuilder 不是线程安全的:Is .NET's StringBuilder thread-safe==> 你应该在 ContinueWith

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

关于c# - 从异步方法将字符串添加到 StringBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25743346/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com