Со времени последнего изменения моего конвейера с распространенным концом один из моих блоков буфера никогда не завершается. Пусть мне подвести итог, что работает, а что нет больше:Блок потока данных TPL никогда не завершается на PropagateCompletion
Ранее работал:
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
Если я раскомментировать комментируемой линию, все но очевидно, что эта строка не нужна.
Как-то мой BufferBlock B никогда не достигает завершения, даже если блок связан с его завершением и распространяет свое завершение, и блок связан от он получает все буферизованные элементы.
Вы должны показать свой фактический код. – i3arnon
@ i3arnon Я не могу поместить весь код, поскольку конвейер довольно сложный, и его очистка только для сохранения соответствующих частей займет много времени, но что более важно, все в моем конвейере довольно стандартно, все мои блоки и одна вещь идет в одной вещи. Те линии, которые ждут вас, являются единственной необычной вещью, и они точно так же, как и у меня, и я считаю, что в остальной части моего отлично работающего конвейера нет ничего, что объясняет, что раскомментирование строки с комментариями заставляет ее работать, и комментируя ее, когда-либо завершающих. –
В конце концов, вам повезло? –