gpt4 book ai didi

c# - 套接字阻塞的目的

转载 作者:行者123 更新时间:2023-12-03 11:53:06 25 4
gpt4 key购买 nike

我一直在使用C#中套接字的Begin/EndAccept/Send/Receive方法一段时间,但直到最近才发现有关System.Net.Sockets的Blocking bool选项的信息。

这是更好的选择吗?如果不是,那么指定是否应阻止Socket的目的是什么?它仅是开发人员是否选择实现阻止/非阻止方法的有用指示?

最佳答案

尝试在阻塞套接字上调用Receive调用意味着该调用在数据到达之前不会返回。使用阻塞套接字时,您的线程实际上会停滞,直到有可用数据为止。因此,如果您尝试在Winforms应用程序的UI线程上执行套接字I/O,则您的UI将无响应并冻结,直到数据到达为止。

非阻塞套接字允许您的代码执行其他操作。如果在非阻塞套接字上调用Receive,则如果没有可用数据,它将立即返回。非阻塞套接字通常与定期轮询机制,“选择”样式等待调用或其他通知机制结合使用以指示数据可用。 .NET还提供了套接字上的BeginReceive方法作为另一种选择。

在“阻塞”和“非阻塞”之间进行选择是一种设计选择。选择会影响线程模型(或线程模型会影响决策)。两者都有设计意义。

早期版本的.NET没有提供BeginReceive IIRC。而且直到.NET版本中的更高版本才提供async-await。在大多数平台上,传统的套接字模型只是“发送”和“接收”,可以选择设置非阻塞模式。

关于c# - 套接字阻塞的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40033946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com