当前位置:编程问答 > C#/ASP.NET >

c#.net的socket的blocking属性为true时有什么效果?

问题:就是说blocking属性为true,看到MSDN解释是“处于阻止模式”,请讲一下阻止模式及相关知识,先谢过了。
答案:阻止(或阻塞)是指线程挂起等待直到操作完成。例如Receive方法,当没有数据可接受时,这个方法一直挂起等待,直到有数据返回。类似的有Console.ReadLine方法也是阻塞接收数据。你可以稍微调试一下就能发现和普通函数的区别了。

非阻止有几种方式,第一种是采用预先判定,调用一个可确定结果的非阻止方法。例如:
if(socket.DataAvailable){   //预先判定,有数据才调用receive
    socket.Receive(...);   //有数据,这个方法立即执行
}
第二种是使用异步,把receive方法放到另外一个线程上执行,直到有数据返回。注意这种方法本质上还是阻止的,只不过组止的是另一个线程而非主线程。
第三种方法是使用超时判定,即如果x秒内还没有数据,方法就返回或抛异常:
socket.ReceiveTimeout = 3000;  //超时值
try{
    socket.Receive(...); //超过三秒还没有数据返回就跑出异常
}catch...
其他:阻塞?
阻塞=同步
非阻塞=异步。 

上一个:哪位大哥帮帮忙吧,实在不会了!用c#写出程序来,郁闷呢啊
下一个:.net framework 3.5 安装时候setup.exe遇到问题需要关闭。怎么回事啊啊,,,

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,