在下面的简化代码中,检查SendAsync()是否已完成传输缓冲区中所有预期字节是正确的吗?或者这是多余的吗?这是针对TCP连接套接字的。我特别关注必须在ProcessSend()中发出第二个子调用SendAsync()的问题。
例如,如果我有多个线程使用每个消息的新(池化的)SocketAsyncEventArg向客户端传输数据,那么是否可能会发生同时发送插入到部分传输的消息之间?或者这是只允许使用一个SocketAsyncEventArg来发送数据的受控访问客户端的好理由?
例如,如果我有多个线程使用每个消息的新(池化的)SocketAsyncEventArg向客户端传输数据,那么是否可能会发生同时发送插入到部分传输的消息之间?或者这是只允许使用一个SocketAsyncEventArg来发送数据的受控访问客户端的好理由?
private void ProcessSend(SocketAsyncEventArgs e)
{
// Check that data was sent
if ((e.SocketError == SocketError.Success) && (e.BytesTransferred > 0))
{
AsyncSendUserToken token = (AsyncSendUserToken)e.UserToken;
// Check that all the data was sent
int offset = e.Offset + e.BytesTransferred;
if (offset < e.Count)
{
// Call send again to finish the send
e.SetBuffer(offset, e.Count - offset);
bool _willRaiseEvent = token.Socket.SendAsync(e);
if (!_willRaiseEvent)
ProcessSend(e);
}
}
}