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 중국어 웹사이트의 기타 관련 기사를 참조하세요!