将 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.EmailAddress
、v.AccountId
等),可以在 Task.WhenAll()
。那么,我如何将 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);
有没有办法将其转换为 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.EmailAddress
、v.AccountId
等),可以在 Task.WhenAll()
。那么,我如何将 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);