等待多个可选任务

时间:2016-02-02 14:51:08

标签: c# .net asynchronous task

您好我想知道是否有更简洁的方法来编写下面的异步代码。基本上我想等待所有任务,但其中一个任务是可选的。我觉得如果我能通过一些回调来做这件事,那就觉得不必要了。但是我们已经无法弄清楚了。

var mobile = true;

var task1 = _service.Async1();
var tasks = new List<Task>
{
    task1
};

Task<int> task2 = null;
if (!mobile)
{
    task2 = _service.Async2();
    tasks.Add(task2);
}

await Task.WhenAll(tasks);

var result1 = task1.Result;

if (!mobile)
{
    result2 = task2.Result;
    // Do stuff
}

1 个答案:

答案 0 :(得分:5)

无需创建列表并立即等待所有结果。为什么不在需要时await?如果task2的运行时间远远超过task1,那么您至少可以在task2完成之前开始处理它。

这样的事情:

var task1 = _service.Async1();

Task<int> task2 = null;
if (!mobile)
{
    task2 = _service.Async2();
}

var result1 = await task1;

if (!mobile)
{
    var result2 = await task2;
    // Do stuff
}