我正在启动 2 个任务,但没有await
-ing 它们,其中一个取决于另一个。我试图理解为什么以下代码阻塞被截断。
public class Tasks {
EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.ManualReset);
public async Task Job1() {
Console.WriteLine("Finished job1");
handle.Set();
}
public async Task Job2() {
handle.WaitOne();
Console.WriteLine("Doing Job2 work");
}
}
class Program {
static async Task Main(string[] args) {
Tasks seq = new Tasks();
var t2 =seq.Job2();
var t1 =seq.Job1();
await Task.WhenAll(t1, t2);
Console.WriteLine("finished both");
}
}
如果我CPU-bound
为我的两个任务创建任务它可以工作:
var t2=Task.Run(seq.Job2);
var t1=Task.Run(seq.Job1);
我还尝试将这两个任务放在与主线程不同的任务中,但它仍然会阻塞:
var bigtask=Task.Run(async()=>{
var t2 =seq.Job2();
var t1 =seq.Job1();
});
CPU-bound
如果我在没有等待的情况下启动一项任务,这与开始一项新任务几乎没有什么不同吗?( Task.Run
)