等待多个可选任务

本文关键字:任务 等待 | 更新日期: 2023-09-27 18:32:51

你好,我想知道是否有一种更简洁的方法来编写下面的异步代码。基本上我想等待所有任务,但其中一个任务是可选的。感觉不必要地详细说明,想着我是否可以通过一些回调来完成,但一直无法弄清楚。

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
}

等待多个可选任务

无需创建列表并一次等待所有结果。为什么不在您需要时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
}