当前位置: 首页 > 编程语言 > C#

TaskdoesnotwaitforContinueWithtocomplete分享

时间:2023-04-10 21:22:37 C#

TaskdoesnotwaitforContinueWithtocompletecontinueWith完成,请指教。请让我知道我遗漏了什么或错了什么。vartask1=Task.Factory.StartNew(()=>DoProcess());task1.ContinueWith(t1=>updateSuccess(),TaskContinuationOptions.NotOnFaulted|TaskContinuationOptions.ExecuteSynchronously);task1.ContinueWith(t=>updateContinuationFault(),Task.OnlyOnFaulted|TaskContinuationOptions.ExecuteSynchronously);任务1.等待();您必须等待任务从主线程完成。简化后看起来像vartask1=Task.Factory.StartNew(()=>DoProcess());successContinuation=task1.ContinueWith(t1=>updateSuccess(),TaskContinuationOptions.NotOnFaulted|TaskContinuationOptions.ExecuteSynchronously)failureContinuation=task1(.t=>updateFault(),TaskContinuationOptions.OnlyOnFaulted|TaskContinuationOptions.ExecuteSynchronously);Task.WaitAny(成功继续,失败继续);我不认为你意识到你正在创建一个任务(实际上是可能的)在不同的线程中执行。在你开始你的任务的那一刻,你将有两个不同的执行线程,主线程将与你的任务一起继续运行。如果想让主线程(控制台应用程序)等待任务完成,就得手动指定。Jorge的解决方案在抛出异常时不起作用:vartask=newTask(()=>{Console.WriteLine("Mytask...");thrownewException();});任务.开始();vartaskNotOnFaulted=task.ContinueWith(t=>{Thread.Sleep(1000);Console.WriteLine("NotOnFaulted");},TaskContinuationOptions.NotOnFaulted|TaskContinuationOptions.ExecuteSynchronously);vartaskOnlyOnFaulted=task.Continue>{Withread(.Sleep(1000);Console.Write("OnlyOnFaulted");},TaskContinuationOptions.OnlyOnFaulted|TaskContinuationOptions.ExecuteSynchronously);Task.WaitAny(taskNotOnFaulted,taskOnlyOnFaulted);Console.WriteLine("我完成了");输出为:..FinishedOnlyOnFaulted这是因为taskNotOnFaulted在抛出异常时获得Canceled状态,而在没有抛出异常时保持WaitingForActivation状态。所以你必须更换:Task.WaitAny(taskNotOnFaulted,taskOnlyOnFaulted);以上就是C#学习教程:任务不等待ContinueWith完成分享的所有内容,如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——如果(task.IsFaulted)taskOnlyOnFaulted.Wait();否则taskNotOnFaulted.Wait();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: