Здесь есть две проблемы.
1) Вы не сообщили блоку, что закончили публиковать, поэтому Completion
никогда не будет сигнализироваться.
Вам нужно сначала позвонить loader.Complete()
:
loader.Complete();
await loader.Completion;
2) Выход TransformBlock некуда, поэтому блок не может завершиться. Блок не может достичь состояния Completed
, пока его выходной буфер не будет очищен. Если вас не волнует вывод ActionBlock. В противном случае вам придется связать блок с чем-то другим, например BufferBlock<string[]>
, например:
var results=new BufferBlock<string[]>();
loader.LinkTo(results);
...
loader.Complete();
await loader.Completion;
Завершение одного блока не будет распространяться на другие связанные блоки, если вы не установите опции PropagateCompletion
в настройках ссылки. В этом случае, хотя нет причин распространять завершение на BufferBlock