等待前面的Complete.ContinueWith完成

时间:2018-01-20 03:08:55

标签: c# task-parallel-library dataflow

编辑解决方案:似乎解决方案是使用下面的代码,我指定了TaskContinuationOption.ExecuteSynchronously

    public ActionBlock<DomainBaseFile[]> GetActionBlock()
    {
        var returnActionBlock = new ActionBlock<DomainBaseFile[]>(
            n => Work(n)
        );
        returnActionBlock.Completion.ContinueWith((s, o) => FinalizeFiles(), new object(), TaskContinuationOptions.ExecuteSynchronously);
        return returnActionBlock;
    }

我有两个任务,即链接的FirstTask和SecondTask。这两项任务都有完成后必须做的事情,即

firstTask.Complete.ContinueWith(t => ...

我目前遇到的问题是SecondTask Complete.ContinueWith似乎在FirstTask.Complete.ContinueWith之前运行,并且假设第一个任务完成而构建代码。

我认为这是因为ContinueWith任务在发送完成信号后立即运行,并且不像完全传播那样进行排序。

反正我是否强迫SecondTask在FirstTask.Complete.ContinueWith完成之前不调用它的Complete方法?

目前,我有

   Task.WhenAll(firstBlock.Completion)
        .ContinueWith(_ => 
            secondBlock.Complete()
   );

但是,这个Task.WhenAll将等待Completion而不是Completion.ContinueWith函数完成。

非常感谢任何帮助。

0 个答案:

没有答案