【发布时间】:2014-02-04 22:35:37
【问题描述】:
我想更清楚地理解这个场景:
考虑以下代码:
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,但我有点期待继续将其重置为进行中。
有人可以更清楚地解释这种行为吗?并提供一个潜在的解决方案,让所有任务(延续)在最终延续之前完成?
【问题讨论】:
标签: c# task-parallel-library async-await continuations