自从我对我的传播完成流水线进行最后一次修改之后,我的缓冲块中的一个永远不会完成。让我总结一下以前工作和现在不再工作的内容:
先前正常工作的内容:
如果我取消注释该行代码,一切都能正常工作,但显然这行代码不应该是必要的。
一些方式中,我的缓冲块B永远无法完成,即使与它相连的块已经完成并传播了其完成信号,并且与它相连的块已经接收到所有缓冲的项。
先前正常工作的内容:
A.LinkTo(B, PropagateCompletion);
B.LinkTo(C, PropagateCompletion);
C.LinkTo(D, PropagateCompletion);
D.Receive();
// everything completes
不再工作:
A.LinkTo(B, PropagateCompletion);
C.LinkTo(D, PropagateCompletion);
await A.Completion;
someWriteOnceBlock.Post(B.Count);
// B.Complete(); commented on purpose
B.LinkTo(C, PropagateCompletion);
D.Receive();
// Only A reaches completion
// B remains in 'waiting for activation'
// C executes but obviously never completes since B doesn't either
如果我取消注释该行代码,一切都能正常工作,但显然这行代码不应该是必要的。
一些方式中,我的缓冲块B永远无法完成,即使与它相连的块已经完成并传播了其完成信号,并且与它相连的块已经接收到所有缓冲的项。