작업 병렬 라이브러리를 사용한 Fire-and-Forget 작업: 폐기 문제
Task Parallel을 사용하여 Fire-and-Forget 작업을 트리거하는 경우 라이브러리(TPL) 개발자는 일반적으로 작업 개체의 적절한 삭제에 대한 질문에 직면합니다. MSDN 문서에서는 마지막 참조를 공개하기 전에 Dispose()를 호출해야 한다고 강조하고 있지만 그렇게 하지 않는 경우의 실질적인 의미는 불분명합니다.
Microsoft의 Stephen Toub에 따르면 작업 처리는 주로 잠재적으로 관리되지 않는 리소스를 처리하기 위해 존재합니다. 작업 완료를 기다릴 때 사용됩니다. 그러나 (fire-and-forget 작업과 같이) 연속만 사용되는 시나리오에서는 이 이벤트 핸들이 할당되지 않습니다.
최근 블로그 게시물에서 Toub는 .Net 4.5에서 내부 대기 핸들은 IAsyncResult.AsyncWaitHandle 속성을 명시적으로 검색하는 경우에만 할당됩니다. 게다가 Task 개체 자체에는 종료자가 없습니다. 대신 핸들은 종료자를 사용하여 개체 내에 캡슐화됩니다. 핸들이 할당되지 않으면 종료자가 호출되지 않습니다.
요약
다음 통찰력을 바탕으로:
대부분의 경우 예, Dispose()를 호출하지 않아도 괜찮습니다. 종료자가 정리를 처리합니다.
예, Stephen Toub의 블로그 게시물에 자세한 설명이 나와 있습니다.
Dispose()를 호출하는 것은 대부분의 시나리오에서 필요하지 않습니다.
아니요, 사용 패턴은 Task.Factory.StartNew()는 실행 후 잊어버리는 작업에 권장되는 접근 방식입니다.
위 내용은 TPL에서 Fire-and-Forget 작업을 폐기해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!