什么';这是使用Task.WhenAll for List的最佳方式<;foo>;数组,并在其中获取foo

本文关键字:foo gt lt 数组 方式 获取 在其中 最佳 List Task 什么 | 更新日期: 2023-09-27 18:25:11

有没有办法将其转换为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()返回一个List<>可在Task.WhenAll()中使用的对象数组(如v.EmailAddressv.AccountId等)。那么,我如何将repository.GetRecords()emailManager.ExportCsvAsync()封装在一个单独的调用中,以这种方式从Task.WhenAll()中获取v.AccountIdv.EmailAddress呢。

我认为这是一种方法。如果你有更好的建议,我会听从的。我是并行技术的新手,仍在努力掌握它的窍门。

谢谢。

什么';这是使用Task.WhenAll for List的最佳方式<;foo>;数组,并在其中获取foo

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

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