【发布时间】:2014-02-18 14:11:19
【问题描述】:
我在处理 task.GetAwaiter().OnCompleted(new Action) 时遇到问题
我有一个包含多个 ContinueWith 的主任务,但是当我返回主任务并在 OnCompleted 上添加一个委托时,它会在主任务处理后触发,而不是在所有 ContinueWith 之后触发
我的问题是,有没有办法知道所有 continue with 何时完成?
这是我当前的代码。
runningTask.Start();
runningTask.GetAwaiter().OnCompleted(() =>
{
KeyValuePair<int, Func<bool>> validator = validationList.FirstOrDefault(x => x.Key == runningTask.Id);
bool shouldContinue = validator.Value();
if (shouldContinue)
{
validationList.Remove(validator.Key);
PerformExecutionByQueue();
}
});
runningTask 是这样创建的
Task runningTask = new Task(delegate method);
Task secondTask = runningTask.ContinueWith(delegate method);
等等。 . .
【问题讨论】:
-
请用您使用的语言标记它。
-
完成,谢谢@RamanShah
-
你想做什么?如果您想在任务完成时执行某些操作,只需在 proper 任务上使用 ContinueWith。 TaskAwaiter 主要由编译器使用,如果 OnComplete 总是在特定任务完成执行时触发,我不会感到惊讶,而不是在任务状态发生变化(例如 RanToCompletion、Canceled 或 Faulted)时触发。
-
@PanagiotisKanavos 我也尝试在 continuewith 上运行它,并使用 rantocompletion 的创建选项,但它也会在 mainTask 之后触发
-
在哪个任务之后?如果你想让它在
secondTask之后运行,你应该调用secondTask.ContinueWith。
标签: c# parallel-processing task