.Net System.IO.Stream async / nonblocking

时间:2015-05-22 01:53:15

标签: c# .net asynchronous stream

我想要包装外部资源并将其转换为我的应用程序中的流(然后由webapi控制器中的PushStreamContent使用)。

C#中的Streams文档并没有真正推断我如何创建使用异步方法的文档。

例如,尝试从System.IO.Stream继承可以提供一种非常同步的“读取”方法。理想情况下,我希望我的阅读是一项“等待”的任务。即使readAsync方法看起来他们希望读取是同步的,他们也只是选择块。

我非常希望在C中选择select,我可以将IO设置为准备好阅读,然后readAsync内容会继续读取。可能存在外部数据待处理的点,因此我希望读取调用遵从其他任务并在准备就绪时继续读取。

public override int Read(byte[] buffer, int offset, int count)
{
    throw new NotImplementedException();
}

我是否应明确覆盖ReadAsync来完成此任务?是否有关于如何在.NET中实现自己的流的文档

1 个答案:

答案 0 :(得分:2)

可读Stream的基础是同步Read操作。 Stream类围绕同步ReadAsync实现Read,因此您无需重写ReadAsync

如果默认实现不充分(例如,您希望将某些智能注入异步代码或基于您正在流式传输的资源的内部实现进行一些性能改进),那么您可以覆盖{{3 }和BeginRead方法。