Mar*_*own 7 c# multithreading networkstream
我的应用程序中有一个工作线程,负责三个不同的事情.在我编写的队列中,有两个作业的请求出现,另一个作业在网络流上出现请求时被激活.我希望我的工作线程在没有工作要做的时候等待.这两个队列很容易,因为它们暴露了一个在有项目时设置的ManualResetEvent,但是NetworkStream似乎没有这个.已从TcpClient检索NetworkStream.
我所追求的是看起来像这样的代码:
while (notDone)
{
WaitHandle.WaitAny(new WaitHandle[] { queue1.HasData, queue2.HasData, netStream.HasData } );
// ...
if (netStream.DataAvailable)
{
netStream.Read(buffer, 0, 20);
// process buffer
}
}
Run Code Online (Sandbox Code Playgroud)
有没有人知道获取在NetworkStream有数据时设置的WaitHandle的方法?
您可以使用NetworkStream的async方法并在EndReceive方法中设置ManualResetEvent.
// ...
netStream.BeginRead(buffer, offset, callback, state);
// ...
Run Code Online (Sandbox Code Playgroud)
在回调方法中
netStream.EndRead(ar);
netStreamManualResetEvent.Set();
Run Code Online (Sandbox Code Playgroud)
然后你的代码
while (notDone)
{
WaitHandle.WaitAny(new WaitHandle[] { queue1.HasData, queue2.HasData, netStreamManualResetEvent} );
// ...
if (netStream.DataAvailable)
{
// make the buffer from the AsyncState in the callback method available here
// process buffer
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9878 次 |
| 最近记录: |