> 백엔드 개발 > C++ > Async/Await의 실행 후 잊어버리기 vs. 대기: 차이점은 무엇이며 언제 사용해야 합니까?

Async/Await의 실행 후 잊어버리기 vs. 대기: 차이점은 무엇이며 언제 사용해야 합니까?

Barbara Streisand
풀어 주다: 2025-01-12 13:17:42
원래의
875명이 탐색했습니다.

Fire and Forget vs. Awaiting in Async/Await: What's the Difference and When Should You Use Each?

Async/Await의 Fire 및 Forget 및 Await: 차이점 및 사용 시나리오

다음 코드는 Callee 메서드를 호출하는 다양한 방법과 동작의 차이점을 보여줍니다.

콜 #1: 실행 후 잊어버리기(간단)

Callee 메서드는 비동기식으로 호출되며 호출자를 차단하지 않습니다.

통화 2: 작업 대기 중(지연)

Callee 메서드는 await 키워드를 사용하고 호출자는 해당 메서드가 완료될 때까지 기다립니다. Callee 메소드에는 1000ms 지연이 포함되어 있으므로 호출자에게는 1초 이상이 소요됩니다.

Call #3 & #5: Task.Run(Fire and Forget)

Task.Run 실행을 위해 Callee 메서드를 스레드 풀에 제출합니다. await을 사용하지 않기 때문에 두 통화 모두 Fire 및 Forget이며 발신자를 차단하지 않습니다.

Call #4 & #6: Task.Run(작업 대기)

#3, #5와 비슷하지만 Task.Run은 내부적으로 await을 사용합니다. 이는 #2와 동일하며 호출자는 작업이 완료될 때까지 기다립니다.

3번과 5번의 차이점

3번과 5번은 모두 Task.Run를 사용하지만 미묘한 차이가 있습니다. #3에서는 Callee을 직접 호출하여 스레드 풀에 새 작업을 생성합니다. #5에서 Callee는 자체 상태 머신을 사용하여 새 작업을 생성하는 비동기 람다 식으로 래핑됩니다. 그러나 두 미션 모두 Fire and Forget이므로 이 경우에는 차이가 크지 않습니다.

서비스 패브릭 참고사항

Service Fabric으로 마이그레이션한 후 HostingEnvironment.QueueBackgroundWorkItem는 더 이상 지원되지 않습니다. 대안으로 Task.Run을 사용할 수도 있지만 별도의 백그라운드 프로세스를 사용하고 큐를 통해 통신하는 것이 더 좋습니다. 이를 통해 프런트엔드 서비스와 백엔드 서비스 간의 격리가 보장되어 성능 문제나 교착 상태가 방지됩니다.

위 내용은 Async/Await의 실행 후 잊어버리기 vs. 대기: 차이점은 무엇이며 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿