Хорошо ли использовать BlockingCollection в качестве запроса FIFO для одного производителя и одного потребителя?

Мне нужен запрос FIFO с одним источником и одним потребителем, потому что

  • мне нужно обрабатывать сообщения в порядке их получения.
  • Мне нужно сделать это асинхронно, потому что вызывающая сторона не должна ждать, пока я обрабатываю сообщение.
  • Обработка следующего сообщения должна начинаться только после завершения обработки предыдущего сообщения. Иногда частота "получения" сообщений выше, чем частота "обработки" сообщений. Но в среднем я должен быть в состоянии обработать все сообщения, просто иногда мне приходится «ставить в очередь» их пачку.

Думаю, это очень похоже на TCP/IP, где у вас есть один производитель и один потребитель, ИНОГДА вы можете получать сообщения быстрее, чем вы можете их обработать, поэтому вам приходится запрашивать их. Где важен порядок, а где звонящему абсолютно не интересно, что вы делаете с этим материалом.

Это звучит достаточно просто, и я, вероятно, могу использовать для этого общую Queue, но я хочу использовать для этого BlockingCollection, потому что я не хочу писать код с ManualResetEventи т.д.

Насколько подходит BlockingCollectionдля моей задачи и, возможно, вы можете предложить что-то еще?

7
задан sll 11 April 2012 в 10:03
поделиться