我有控制台应用程序和代码如下,
我的问题是在ContinueWith任务完成之前,控制台应用程序结束,它没有等待continueWith完成,请指教.
请让我知道我遗失或不正确的内容.
var task1 = Task<bool>.Factory.StartNew(() => DoProcess());
task1 .ContinueWith(
t1 => updateSuccess(),
TaskContinuationOptions.NotOnFaulted | TaskContinuationOptions.ExecuteSynchronously);
task1 .ContinueWith(
t => updateFault(),
TaskContinuationOptions.OnlyOnFaulted | TaskContinuationOptions.ExecuteSynchronously);
task1.Wait();
Run Code Online (Sandbox Code Playgroud)
您必须等待任务从主线程完成.简化它看起来像
var task1 = Task<bool>.Factory.StartNew(() => DoProcess());
successContinuation = task1 .ContinueWith(t1 => updateSuccess(),
TaskContinuationOptions.NotOnFaulted | TaskContinuationOptions.ExecuteSynchronously)
failureContinuation = task1 .ContinueWith( t => updateFault(),
TaskContinuationOptions.OnlyOnFaulted | TaskContinuationOptions.ExecuteSynchronously);
Task.WaitAny(successContinuation, failureContinuation);
Run Code Online (Sandbox Code Playgroud)
我想你并没有意识到你正在创建一个任务(实际上只是可能)在不同的线程中执行.一旦你开始你的任务,你有两个不同的执行线程,主线程将继续运行,你的任务.如果您希望主线程(控制台应用程序)等待任务完成,则必须手动指定它.