Looking for c# Keywords? Try Ask4Keywords

C# Language BroadcastBlock


пример

(Скопируйте элемент и отправьте копии в каждый блок, к которому он привязан)

В отличие от BufferBlock, миссия BroadcastBlock в жизни - включить все цели, связанные с блоком, чтобы получить копию каждого опубликованного элемента, постоянно переписывая «текущее» значение с теми, которые были распространены на него.

Кроме того, в отличие от BufferBlock, BroadcastBlock не требует лишних данных. После того как конкретная дата была предложена всем целям, этот элемент будет перезаписан любым фрагментом данных в строке (как и во всех блоках потока данных, сообщения обрабатываются в порядке FIFO). Этот элемент будет предлагаться всем целям и т. Д.

введите описание изображения здесь

Асинхронный производитель / потребитель с дроссельной заслонкой

var ui = TaskScheduler.FromCurrentSynchronizationContext();
var bb = new BroadcastBlock<ImageData>(i => i);

var saveToDiskBlock = new ActionBlock<ImageData>(item =>
    item.Image.Save(item.Path)
);

var showInUiBlock = new ActionBlock<ImageData>(item =>
    imagePanel.AddImage(item.Image), 
    new DataflowBlockOptions { TaskScheduler = TaskScheduler.FromCurrentSynchronizationContext() }
);

bb.LinkTo(saveToDiskBlock);
bb.LinkTo(showInUiBlock);

Предоставление статуса от агента

public class MyAgent
{
    public ISourceBlock<string> Status { get; private set; }
    
    public MyAgent()
    {
        Status = new BroadcastBlock<string>();
        Run();
    } 

    private void Run()
    {
        Status.Post("Starting");
        Status.Post("Doing cool stuff");
        …
        Status.Post("Done");
    }
}

Введение в поток данных TPL Стивена Туба