等待多个可选任务
Await multiple optional tasks
您好,我想知道是否有更简洁的方法来编写下面的异步代码。基本上我想等待所有任务,但其中一项任务是可选的。感觉多此一举,想着能不能通过回调搞定,一直想不通。
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
}
您好,我想知道是否有更简洁的方法来编写下面的异步代码。基本上我想等待所有任务,但其中一项任务是可选的。感觉多此一举,想着能不能通过回调搞定,一直想不通。
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
}