Реализация асинхронного потока для производителя / пользователя в C # / .NET

Существует библиотека, которая выводит свои результаты в заданный объект Stream. Я хотел бы начать использовать результаты до того, как библиотека будет готова. Stream должен быть блокирующим, чтобы упростить использование и избежать чрезмерного потребления памяти, если производитель забегает слишком далеко; потокобезопасный, чтобы разрешить независимое существование производителя и потребителя.

После завершения работы библиотеки поток производителя должен закрыть поток, тем самым уведомив потребителя, что данных больше нет.

Я думал об использовании NetworkStream или PipeStream (анонимно) ), но оба они, вероятно, работают медленно, так как отправляют данные через ядро.

Какие-нибудь рекомендации?


var stream = new AsyncBlockingBufferedStream();

void ProduceData() { // In producer thread externalLib.GenerateData(stream); stream.Close(); }

void ConsumeData() { // In consumer thread int read; while ((read = stream.Read(...)) != 0) { ... } }

9
задан Yurik 15 September 2010 в 20:31
поделиться