C# 이 SocketAsyncEventArgs를 사용해 비동기 작업이 이미 진행중입니다 해결 방법
C# 소켓 프로그래밍 중, Socket.SendAsync(SocketAsyncEventArgs e) 메서드를 사용해 List의 모든 클라이언트에 대해 전송 작업을 하다 보니 클라이언트가 두 개 이상이 될 경우 SocketAsyncEventArgs를 사용해 비동기 작업이 이미 진행중이라는 에러가 발생했습니다.
그래서 이것 저것 시도해보다가 결국 SendAsync를 BeginSend로 바꿔 해결했습니다.
기존 코드:
변환 후 코드:
그래서 이것 저것 시도해보다가 결국 SendAsync를 BeginSend로 바꿔 해결했습니다.
기존 코드:
foreach (var client in clients)
{
client.SendAsync(args);
}
변환 후 코드:
foreach (var client in clients)
{
client.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallback), client);
}
// SendCallback
private void SendCallback(IAsyncResult IAR)
{
Socket client = IAR.AsyncStatus as Socket;
client?.EndSend(IAR);
}
댓글
댓글 쓰기