什么';这是使用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.EmailAddress
、v.AccountId
等)。那么,我如何将repository.GetRecords()
和emailManager.ExportCsvAsync()
封装在一个单独的调用中,以这种方式从Task.WhenAll()
中获取v.AccountId
和v.EmailAddress
呢。
我认为这是一种方法。如果你有更好的建议,我会听从的。我是并行技术的新手,仍在努力掌握它的窍门。
谢谢。
您可以使用Enumerable.Select
从ProfileLookup()
投影每个值。这不会使任何东西在它自己的进程中运行,它将同时调用ExportCsvAsync
:
var tasks = ProfileLookup().Select(v => emailManager.ExportCsvAsync(
repository.GetRecords(v.AccountId),
v.EmailAddress,
"Purchases.csv"));
await Task.WhenAll(tasks);