Существует библиотека, которая выводит свои результаты в заданный объект 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)
{ ... }
}