В документации .Complete()
говорится следующее:
Сигналы
IDataflowBlock
о том, что он не должен больше ни принимать, ни создавать сообщения, ни потреблять какие-либо отложенные сообщения.
Итак, скажем, у меня есть BatchedJoinBlock
, который я хочу завершить, когда его исходный блок завершится, но я не могу распространять, потому что ссылки находятся на предикатах:
block1.LinkTo(block2.Target1, predicate);
block1.LinkTo(block2.Target2, !predicate);
await block1.Completion;
block2.Complete();
Итак, согласно документации, последняя строка остановит block2
создание новых сообщений, но проблема в том, что block1
завершается, как только block2
принимает все свои сообщения, но эти принятые сообщения могут быть еще не обработаны, так что же произойдет с ними, если block2
не может создавать новые сообщения?
Возможно, я неправильно истолковываю генерировать больше сообщений?
block1.Completion
, но вы не сигнализируете о завершении с помощьюblock.Complete
. - person i3arnon   schedule 30.06.2015