Fire-and-Forget 백그라운드 작업에 작업 삭제가 필요한가요?
백그라운드 스레드에서 Fire-and-Forget 작업을 수행할 때 개발자는 TPL(작업 병렬 라이브러리) 메서드 Task.Factory.StartNew()를 활용하는 경우가 많습니다. 이 메서드는 Task 객체를 반환하므로 적절한 폐기에 대한 우려가 있습니다.
msdn 문서에서는 Task에 대한 마지막 참조를 해제하기 전에 Dispose()를 호출할 것을 제안합니다. 그러나 이 메서드를 호출하기 위해 작업 완료를 기다리는 것은 백그라운드 실행의 목적을 무효화합니다.
토론
Microsoft pfx 팀의 Stephen Toub에 따르면 Task 개체는 완료를 기다리는 동안 이벤트 핸들을 래핑합니다. 그러나 연속이 활용되는 경우 이 핸들은 할당되지 않습니다. 따라서 마무리는 적절한 정리 방법입니다.
업데이트(2012년 10월)
Toub의 블로그 게시물 "Do I Need to Dispose of Tasks?"에서 추가 설명을 제공합니다. .NET 4.5에서 태스크는 AsyncWaitHandle이 명시적으로 사용될 때만 내부 대기 핸들을 할당합니다. 게다가 Task에는 종료자가 없습니다. 할당된 모든 핸들은 종료자가 있는 객체로 래핑됩니다. 이는 대부분의 Task 개체를 처리하는 것이 불필요하다는 것을 의미합니다.
결론
대부분의 경우 화재에 사용되는 Task 개체에 대해 Dispose() 호출을 자제하는 것이 허용됩니다. -백그라운드 작업은 잊어버리세요. 일반적으로 마무리는 리소스 정리에 충분합니다. 그러나 AsyncWaitHandle이 활용되거나 애플리케이션이 이러한 작업에 크게 의존하는 경우 명시적인 폐기가 보장될 수 있습니다.
위 내용은 Fire-and-Forget 백그라운드 작업에서 작업을 폐기해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!