C#非阻塞套接字没有while(true)循环

ʞᴉɯ*_*ʞᴉɯ 8 c# sockets nonblocking while-loop

我只是想在c#中使用非阻塞套接字进行一些套接字编程.我发现的各种样本,比如这样,似乎使用了一个while(true)循环,但是这种方法会导致cpu以100%的速度突发.有没有办法使用事件编程风格的非阻塞套接字?谢谢

Mat*_*vis 8

请参阅此处的MSDN示例.该示例显示了如何异步接收数据.您还可以使用Socket BeginSend/EndSend方法异步发送数据.

您应该注意,回调委托在ThreadPool线程的上下文中执行.如果回调内部接收的数据需要与另一个线程共享,这很重要,例如,以Windows窗体显示数据的主UI线程.如果是这样,您将需要使用lock关键字同步访问数据,例如.

正如您所注意到的那样,使用非阻塞套接字和while循环,处理器固定为100%.异步模型仅在有数据要发送或接收时才调用回调委托.


小智 5

避免在没有数据接收thread.sleep(100)或更少的数据时,在沉重的 while 循环中出现 CPU 问题。这将使其他进程改变来完成他们的任务