인프런 커뮤니티 질문&답변

이세진님의 프로필 이미지
이세진

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Session #2

AcceptAsync() 와 BeginAccept() 의 차이가 궁금합니다.

작성

·

214

·

수정됨

0

이 강의를 구매하기 전 이런저런 자료를 찾아보며 혼자 TCP 통신을 공부하고 있었습니다. 그런데 제가 공부할 때는 Begin~() 를 사용했었습니다. 그런데 이 강의 에서는 ~Async() 를 사용하더라고요 사용하기는 Begin~() 이 더 간단하던데 이 강의에서 ~Async() 를 사용하는 다른 이유가 있을까요? 궁금합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
이세진님, ‘AcceptAsync()‘와 ‘BeginAccept()‘는 둘 다 비동기적으로 클라이언트의 연결 요청을 수락하는 방법이지만 내부 구현과 사용하는 패턴에 차이가 있습니다.

‘BeginAccept()’ 메서드는 .NET Framework 초기 버전에서 도입된 Asynchronous Programming Model(APM) 패턴을 사용하는데, 이는 IAsyncResult 인터페이스를 반환하고 별도의 콜백 메서드를 정의하여 결과를 처리합니다. 콜백 메서드에서 EndAccept() 메서드를 호출하여 비동기 작업을 완료하고 결과를 처리합니다.

반면에 ‘AcceptAsync()’ 메서드는 .NET Framework 3.5부터 도입된 Task-based Asynchronous Pattern(TAP)을 사용합니다. 이 패턴은 Task 객체를 반환하며, C# 5.0부터 도입된 ‘async’와 ‘await’ 키워드와 함께 사용하여 비동기 코드를 동기식 코드와 유사하게 작성할 수 있습니다.

강의에서 ‘AcceptAsync()’ 메서드를 사용하는 이유는 다음과 같을 수 있습니다.

  1. 코드의 가독성과 유지보수: ‘async’/‘await’를 사용하면 비동기 코드를 작성할 때 코드의 가독성과 유지보수가 향상됩니다. 예외 처리와 실행 흐름이 더 명확해집니다.
  2. 성능 향상: TAP 패턴은 스레드 풀의 작업 스레드를 더 효과적으로 관리하고, 서버의 확장성과 성능을 향상시킬 수 있습니다.
  3. 체계적인 비동기 프로그래밍: 최신 .NET API들은 TAP 패턴을 채택하고 있으므로, 해당 패턴을 사용함으로써 .NET 생태계와의 일관성을 유지할 수 있습니다.

강의의 선택된 메서드를 따라가며 학습하시면 분명 해당 방식의 장점에 대해 더 자세히 배우게 될 것입니다. 혹시 더 궁금한 점이 있다면 강의의 수강 전 문의 게시판을 통해 질문하실 수도 있습니다.

이세진님의 프로필 이미지
이세진
질문자

답변 감사합니다. 답변을 중심으로 더 공부해 보겠습니다.

이세진님의 프로필 이미지
이세진

작성한 질문수

질문하기