我在我的應用程序中有一個工作線程負責三個不同的事情。兩個作業的請求在我編寫的隊列中打開,另一個作業在網絡流上發出請求時激活。如果沒有工作要做,我希望我的工作線程能夠等待。使用這兩個隊列很容易,因爲它們暴露了在有項目時設置的ManualResetEvent,但是NetworkStream似乎沒有這個。 NetworkStream已從TcpClient中檢索。如何等待網絡數據流讀取數據?
我所後的代碼看起來是這樣的:
while (notDone)
{
WaitHandle.WaitAny(new WaitHandle[] { queue1.HasData, queue2.HasData, netStream.HasData });
// ...
if (netStream.DataAvailable)
{
netStream.Read(buffer, 0, 20);
// process buffer
}
}
有誰知道一種方式來獲得時的NetworkStream具有數據時設置的WaitHandle的?
是否有可能得到的BeginRead閱讀零個字節? – 2009-09-02 11:32:36
如果遠程主機關閉連接並且沒有更多數據可用,則將讀取0個字節。你爲什麼要問? – SpaceghostAli 2009-09-02 13:05:31
如果您無法使BeginRead讀取零字節,則必須開始管理主循環和回調之間的讀取緩衝區。這是完全可行的,但並不像我想的那麼好。 – 2009-09-03 15:22:04