c# - ForEachAsync 并将项目添加到外部集合 - 列表还是并发集合?

标签 c#

如果我在下面的代码中使用 ForEachAsync,我应该使用列表还是并发集合?

var images = new List<Image>(); // or a concurrency collection?
await users.ForEachAsync(async u =>
{
    Image image = await DownloadImageAsync(u.ImageId);
    images.Add(image);
}); 

最佳答案

我会这样做:

// Create a list of tasks
var imageTasks = new List<Task<Image>>();

// Use ForEachAsync to add tasks to the list
await users.ForEachAsync(u => imageTasks.Add(DownloadImageAsync(u.ImageId)));

// Wait for all tasks to complete
IEnumerable<Image> images = await Task.WhenAll(imageTasks);

使用ForEachAsync的问题你所拥有的方式是它接受 Action<T>这是不能等待的。这意味着ForEachAync可能会先于所有 DownloadImageAsync 完成调用已完成。

关于c# - ForEachAsync 并将项目添加到外部集合 - 列表还是并发集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59896825/

相关文章:

c# - 如何修复 Azure 函数上的此 502 错误?

c# - ReactiveUI:如何从 ReactiveCommand 取消 Observable?

c# - 密码哈希 - 为什么加盐 60,000 次

c# - HttpWebRequest 底层连接被关闭

c# - 在 C# 中使用 Selenium ChromeDriver 单击下载 PDF 不起作用

c# - 获取 WPF 路径的长度

c# - 单元测试 EF DbUpdateConcurrencyException 处理

c# - 三次贝塞尔曲线问题

c# - 避免神奇的字符串和数字

c# - 反序列化 XML 文件而不将其全部加载到内存中