這是一個非常簡單的問題,但我似乎無法想象沒有與別人交談。MemoryStream等到有東西要讀
我需要一個類似於MemoryStream的流,它將在讀取之前異步阻塞,直到有東西需要讀取或超時。
更新: 好的。我放棄了,並且自己寫了Wrapper類,但EndRead總是返回0.請看下面的代碼。 (不提供任務導向的解決方案。)
public class BlockingMemoryStream : MemoryStream
{
ManualResetEventSlim isReadReady = new ManualResetEventSlim(false);
public override void Write(byte[] buffer, int offset, int count)
{
base.Write(buffer, offset, count);
//base.Position = offset; //I do not know if I need this!!!!
isReadReady.Set();
}
public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
{
IAsyncResult result = base.BeginRead(buffer, offset, count, callback, state);
return result;
}
public override int EndRead(IAsyncResult asyncResult)
{
isReadReady.Wait(/*600000*/);
int aa = base.EndRead(asyncResult);
return aa;
}
}
上下文不清楚或不明顯。它將如何寫入? – 2014-12-03 08:34:38
請看C.Evenhuis的代碼。那個代碼就是我想要避免的。 – Tanya 2014-12-03 08:58:24
如果你真的只想要一個涉及.NET本身的現有實現的答案,我不認爲你會得到這個答案。一個簡單的啓用超時的'Stream'包裝器可以在沒有太多麻煩的情況下實現(目前的答案儘管如此),但我想如果你只對.NET中已經存在的某些東西感興趣,沒有意義。 – 2014-12-03 19:46:46