[英]Simplify Task foreach loop c#
我有許多foreach循環,在其中將項目添加到要繼續執行的任務列表中。
我每個人都有以下布局,但是我覺得這很冗長,因此想看看是否有一種更簡潔的方式來編寫?
我需要捕獲每個DoTaskOnItem的所有錯誤並將其記錄下來,然后繼續進行其余的其他任務。
private async Task DoListOfTasks(List<string> items)
{
List<Task> tasks = new List<Task>();
foreach (var item in items)
{
var task = Task.Run(async () =>
{
try
{
await DoTaskOnItem(item);
}
catch
{
AddErrorMessage($"Error: {item}");
}
});
tasks.Add(task);
}
await Task.WhenAll(tasks);
}
您可以執行以下操作:
private Task DoListOfTasks(List<string> items)
{
return Task.WhenAll(items.Select(item => Task.Run<Task>(async () =>
{
try
{
await DoTaskOnItem(item);
}
catch
{
AddErrorMessage($"Error: {item}");
}
})));
}
我將在DoTaskOnItem
內部移動異常處理,它將簡化為:
private Task DoListOfTasks(List<string> items)
{
return Task.WhenAll(items.Select(DoTaskOnItem));
}
此時, DoListOfTasks
方法甚至不需要,因為它太簡單了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.