需要澄清等待任务的方法
本文关键字:任务 方法 等待 | 更新日期: 2023-09-27 18:32:45
var task = Xyz.Start();
task.ContinueWith((ant)=> Validate());
task.Wait();
与
var task1 = Xyz.Start();
var task2 = task1.ContinueWith((ant)=> Validate());
task2.Wait();
最近我遇到了一个SO问题(对不起,不记得是哪一个),OP的示例代码就像顶部的代码一样。 接受的答案更正了底部的代码,没有任何解释。
那么这两个代码片段之间有什么区别,为什么底部的代码片段是正确的?我认为task1.ContinueWith()
实际上是task1.Wait()
这意味着在任务 1 返回之前执行不会继续。
ContinueWith
不会等待。它注册要在任务完成时执行的回调。也许您应该查看ContinueWith
的文档以更完整地了解这一点。
您需要哪种形式取决于您想要什么。如果只想在继续完成后继续,则需要等待 task2
。
我认为
task1.ContinueWith()
实际上是task1.Wait()
这意味着在task1
返回之前不会继续执行。
不。 ContinueWith()
确保仅在Task
完成后才开始执行您传递到的委托。但它不会阻止调用它的代码的执行。
好吧,如果我们阅读代码,它相当简单
//Start initial task
Task initTask = Xyz.Start();
//Continue initial task with something
Task continueTask = initTask.ContinueWith((obj)=> { /*work work*/ });
//Wait for the initial task to finish (not the continue)
initTask.Wait();
//Wait for the continue task to finish
continueTask.Wait();