В моем приложении у меня есть тонны событий, поступающих от третьих лиц почти каждый раз, я должен обработать их и отправить (опубликовать) их по сети на RabbitMQ организации,Мои сомнения касаются использования здесь в потоке данных TPL.представьте, что код такой:
private TransformBlock<QuoteEvent, Quote> _quotesProcessingBlock;
private ActionBlock<Quote> _deliveryBlock;
public TplDataFlow()
{
_quotesProcessingBlock = new TransformBlock<QuoteEvent, Quote>(
x => ProcessQuoteEvent(x));
_deliveryBlock = new ActionBlock<Quote>(quote => Publish(quote));
_quotesProcessingBlock.LinkTo(
_deliveryBlock,
new DataflowLinkOptions { PropagateCompletion = true }
);
}
//This callback method registered at the 3rd party events producer.
//It runs single threaded, so I need to process it quickly
private void ProcessEvent(QuoteEvent quoteEvent)
{
_quotesProcessingBlock.Post(quoteEvent);
//What will be the trigger for those lines??
_quotesProcessingBlock.Complete();
_deliveryBlock.Completion.ConfigureAwait(false).GetAwaiter().GetResult();
}
Я не уверен, когда буду использовать _quotesProcessingBlock.Complete();
и _deliveryBlock.Completion
.Мне кажется нецелесообразным делать это для каждого события котировки (сотни в секунду):
Если это так, я должен удалить его или переместить на другой уровень?
Или
Поток данных здесь не является правильным решением?
Если есть, то есть альтернативное решение?