Как правильно дождаться завершения при разветвлении конвейера потока данных TPL? [дубликат]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно дождаться завершения при разветвлении конвейера потока данных TPL? [дубликат]

Сообщение Anonymous »

У меня есть конвейер потока данных TPL, в котором целевой блок связан с двумя распространяющимися блоками, которые затем оба связаны с исходным блоком. Все они связаны с PropagateCompletion = true. Первый распространяющий блок связан с фильтром, принимающим только четные числа, а второй принимает все оставшиеся сообщения.
После публикации последнего сообщения я устанавливаю первый блок как завершенный. Однако, похоже, существует состояние гонки. Кажется, что последний блок иногда обрабатывает все значения, но иногда только те значения, которые были приняты первым блоком распространения, и только часть значений, которые были приняты вторым блоком распространения.
Я чувствую, что существует состояние гонки. Но я понятия не имею, как правильно проинструктировать окончательный исходный блок о том, что все завершено, только после того, как оба связанных с ним распространяющих блока пересылают все свои сообщения.
Вот мой код сокращен до простого примера:
internal static class Program
{
public static async Task Main(string[] args)
{
var linkOptions = new DataflowLinkOptions
{
PropagateCompletion = true
};
var bufferBlock = new BufferBlock();
var fork1 = new TransformBlock(n => n);
var fork2 = new TransformBlock(n =>
{
Thread.Sleep(100);
return n;
});
var printBlock = new ActionBlock(Console.WriteLine);

bufferBlock.LinkTo(fork1, linkOptions, n => n % 2 == 0);
bufferBlock.LinkTo(fork2, linkOptions, n => n % 2 != 0);

fork1.LinkTo(printBlock, linkOptions);
fork2.LinkTo(printBlock, linkOptions);

for (var n = 1; n

Подробнее здесь: https://stackoverflow.com/questions/729 ... w-pipeline
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Невозможно получить доступ к node-taxonomy.tpl.php через page-taxonomy-term.tpl в Drupal 6.
    Anonymous » » в форуме Php
    0 Ответы
    47 Просмотры
    Последнее сообщение Anonymous
  • Функции Bash ведут себя по-разному при исходном коде и при разветвлении.
    Anonymous » » в форуме Linux
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • Как дождаться завершения потока рендеринга в WPF?
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Как дождаться завершения потока рендеринга в WPF?
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Как дождаться завершения потока рендеринга в WPF?
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»