我想做一件简单的事情(假设ContinueWith
是线程安全的):
readonly Task _task = Task.CompletedTask;
// thread A: conditionally prolong the task
if(condition)
_task.ContinueWith(o => ...);
// thread B: await for everything
await _task;
问题:在上面的代码中await _task
立即返回,忽略是否有内部任务。
_task
可以延长多个 的扩展需求,ContinueWith
我将如何等待它们全部完成?
当然,我可以尝试以旧的线程安全方式进行操作:
Task _task = Task.CompletedTask;
readonly object _lock = new object();
// thread A
if(condition)
_lock(_lock)
_task = _task.ContinueWith(o => ...); // storing the latest inner task
// thread B
lock(_lock)
await _task;
或者通过将任务存储在线程安全集合中并使用Task.WaitAll
.
但我很好奇第一个片段是否有一个简单的修复方法?