你好,我想知道是否有更简洁的方法来编写下面的异步代码。基本上,我想等待所有任务完成,但其中一个任务是可选的。感觉这样做过于繁琐,考虑通过某些回调来实现,但一直没有想出来。
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
}
result1
来处理result2
吗(在代码中看到"// Do stuff
")?例如,"stuff
"是否使用了result1
? - spendervar results = Task.WaitAll<int>(_service.Async1(), mobile ?Task<int>.FromResult(0) : _service.Async2());
现在,如果调用了Async2(),则results[1]
包含其结果;否则为零,而results[0]
包含Async1()
的结果。 - Raymond Chen