2015-05-22 32 views
1

我想包裝一個外部資源並將其轉換爲我的應用程序中的一個流(然後在webapi控制器中使用PushStreamContent)。.Net System.IO.Stream async/nonblocking

C#中的Streams文檔並不真正推斷出我可以如何創建一個使用異步方法的文檔。

例如試圖從System.IO.Stream繼承給出一個非常syncrhonous看「讀」的方法。理想情況下,我希望我的閱讀是一項「等待」的任務。即使readAsync方法看起來像他們期望讀取是同步的,他們只是選擇塊。

我非常想在C中選擇,在那裏我可以設置IO準備好讀取,然後readAsync的東西將繼續閱讀。有些地方可能有外部數據懸而未決的情況,所以我希望閱讀電話能夠遵守其他任務,並在準備就緒時繼續閱讀。

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

我是否應該明確重寫ReadAsync來完成此操作?有沒有解決如何實現.NET

+0

你能否澄清一下你是什麼意思「'ReadAsync' ...期待閱讀是同步的」? –

+0

我不明白你爲什麼不能重寫'ReadAsync'和'Read'。 –

回答

2

的可讀Stream的基礎是同步Read運行自己的數據流的任何文件。 Stream類實現ReadAsync圍繞同步Read,因此您不需要重寫ReadAsync

如果默認的實現是不夠的(如,有你想要注入異步代碼或基於內部實現你流的資源的一些性能改進一些聰明),那麼你可以重寫BeginReadEndRead方法。

相關問題