Task.WhenAll,每个任务都有超时

时间:2019-03-14 19:39:02

标签: c# task-parallel-library

在进行一些工作之前,我需要从多个站点获取数据,每个站点都有超时限制。我的代码如下所示。此解决方案正确还是会导致性能问题?

protected List<Source> Sources { get; set; }

private async Task<List<SomeData>> GetSomeData()
{
    var result = new ConcurrentBag<SomeData>();

    var tasks = new List<Task>();

    foreach (var source in Sources)
    {
        tasks.Add(await Task.WhenAny(
            Task.Run(() =>
            {
                result.Add(_dataFactory.GetData(source));
            }),
            Task.Delay(Timeout))
        );
    }

    await Task.WhenAll(tasks);

    return result.ToList();
}

0 个答案:

没有答案
相关问题