C# 이 SocketAsyncEventArgs를 사용해 비동기 작업이 이미 진행중입니다 해결 방법

  C# 소켓 프로그래밍 중, Socket.SendAsync(SocketAsyncEventArgs e) 메서드를 사용해 List의 모든 클라이언트에 대해 전송 작업을 하다 보니 클라이언트가 두 개 이상이 될 경우 SocketAsyncEventArgs를 사용해 비동기 작업이 이미 진행중이라는 에러가 발생했습니다.

  그래서 이것 저것 시도해보다가 결국 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);
}

댓글

이 블로그의 인기 게시물

C# 남아도는 메모리에도 불구하고 OutOfMemoryException이 발생한다면?

USB를 뒤는 괜찮은데 앞에 꽂으면 인식이 힘들다?

MySQL 데이터 타입과 Java 데이터 타입 비교/매칭