我想了解这个场景更清晰一点:
考虑下面的代码:
frmProgressAsync prog = new frmProgressAsync(true);
TaskWithProgress t = new TaskWithProgress("Smoothing CP", true);
t.Task = A.ShowMovingAverage(tension,t.Progress)
.ContinueWith(prev =>
{
t.ProgressInformation.Report("Smoothing FG");
B.ShowMovingAverage(tension, t.Progress);
});
await prog.RunAsync(t);
我有两个任务,我希望运行A.ShowMovingAverage
和B.ShowMovingAverage
。 都返回任务。
在prog.RunAsync()
方法,我有以下:
public virtual Task RunAsync(TaskWithProgress task)
{
Show();
TaskIsRunning();
task.ContinueWith(Close(), CancellationToken.None, TaskContinuationOptions.OnlyOnRanToCompletion, this._Scheduler);
return task.Task;
}
因此,有效地,我有三个任务,又一个运行以前完成之后。
现在我的问题是,在某些情况下,第一个任务几乎立即完成。 当该呼叫prog.RunAsync()
制成,并最终延续附加到任务时,它会立即运行,关闭窗体。
我可以看到,如果我在最后打破ContinueWith()
调用,任务状态RanToCompletion
,但我有种期待延续重置此回正在进行中。
可能有人请稍微更干净解释这种现象? 并提供一个潜在的解决方案,使所有任务(延续)最终延续前完成?