将 Task.WhenAll 用于 List<foo> 数组并在其中将 foo 值获取到 运行 脚本的最佳方法是什么?

What's the best way to use Task.WhenAll for List<foo> array and inside it get foo values to run scripts?

有没有办法将其转换为 Task.WhenAll() 并让脚本的一小部分 运行 独立于自己的进程?我是并行性的新手,正在尝试找出执行此操作的最佳方法。

var emailManager = new EmailManager();
var repository = new Repository();

foreach(var v in ProfileLookup())
{
   await emailManager.ExportCsvAsync(
       repository.GetRecords(v.AccountId),
       v.EmailAddress,
       "Purchases.csv"
   );
}

我看到的是 ProfileLookup() return 一个 List<> 对象数组(如 v.EmailAddressv.AccountId 等),可以在 Task.WhenAll()。那么,我如何将 repository.GetRecords()emailManager.ExportCsvAsync() 包含在一个单独的调用中,以这种方式从 Task.WhenAll() 中获取 v.AccountIdv.EmailAddress

这是我看到的一种方法。如果您有更好的建议,那么我会洗耳恭听。我是并行性的新手,仍在努力掌握它。

谢谢。

您可以使用 Enumerable.SelectProfileLookup() 投影每个值。这不会在它自己的进程中做任何事情 运行,它会同时调用 ExportCsvAsync

var tasks = ProfileLookup().Select(v => emailManager.ExportCsvAsync(
   repository.GetRecords(v.AccountId),
   v.EmailAddress,
   "Purchases.csv"));

await Task.WhenAll(tasks);