Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SendAsync何时完成?_C#_Sendasync - Fatal编程技术网

C# SendAsync何时完成?

C# SendAsync何时完成?,c#,sendasync,C#,Sendasync,我正在编写服务器,需要能够向所有连接的客户端发送消息 我正在尝试决定是否应该为每个连接的套接字创建SocketAsyncEventArgs并一次发送所有数据包 另一种方法是使用单个SocketAsyncEventArgs并逐个发送数据包。然后,在ProcessSend方法中调用SendAsync很有诱惑力,该方法在SendAsync完成并具有连接套接字队列时调用。但是,如果由于某种原因,SendAsync无法在合理的时间内完成,该怎么办?是否有任何情况会使其永远无法完成?SendAsync将立即

我正在编写服务器,需要能够向所有连接的客户端发送消息

我正在尝试决定是否应该为每个连接的套接字创建SocketAsyncEventArgs并一次发送所有数据包


另一种方法是使用单个SocketAsyncEventArgs并逐个发送数据包。然后,在ProcessSend方法中调用SendAsync很有诱惑力,该方法在SendAsync完成并具有连接套接字队列时调用。但是,如果由于某种原因,SendAsync无法在合理的时间内完成,该怎么办?是否有任何情况会使其永远无法完成?

SendAsync将立即返回。如果您谈论的是发送操作本身,它永远不会完成,但是如果套接字处于异常状态,则可能需要很长时间。

是的,我知道该方法总是立即返回。但是,如果调用完成的事件处理程序之前的时间可能很长,那么拥有一个发送队列并重用相同的SocketAsyncEventArgs是不安全的;或者,如果它是一个流同步的、有保证的传递协议,我认为如果接收器读取以前的数据速度较慢,因此连接的网络缓冲区已满且处于流控制状态,则可能需要很长时间。@remdao:您应该假设SendAsync可能需要比您希望的更长的时间,并相应地编码。在几乎所有情况下,您的整个事件都会很快发生,但您不能指望这一点。如果您希望在调用API后立即重用资源,那么您应该使用同步API。