Observable,它读取流直到它结束或出现错误

时间:2013-01-19 22:03:36

标签: c# system.reactive

使用反应式扩展,如何创建一个Observable,它将继续在流上调用Read方法并将结果传播给它的观察者?

或者这是接近事物的完全错误的方式?我应该实现自己的IObservable吗?

1 个答案:

答案 0 :(得分:2)

我从未遇到过实施自己的观察能力的情况。

请改为尝试:

public static IObservable<byte[]> ObservableRead(Stream stream, int bufferSize)
{
    return Observable.Create<byte[]>(o =>
    {
        var buffer = new byte[bufferSize];
        var read = 0;
        try
        {
            while (true)
            {
                read = stream.Read(buffer, 0, buffer.Length);
                if (read == 0)
                {
                    break;
                }
                var results = buffer.Take(read).ToArray();
                //Always return a copy
                //never the buffer for concurrency's sake.
                o.OnNext(results);
            }
        }
        catch (Exception ex)
        {
            o.OnError(ex);
        }
        finally
        {
            o.OnCompleted();
        }
        return Disposable.Empty;
    });
}