簡體   English   中英

簡化Task foreach循環C#

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM