>백엔드 개발 >C++ >TPL에서 Fire-and-Forget 작업을 폐기해야 합니까?

TPL에서 Fire-and-Forget 작업을 폐기해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-03 20:35:40212검색

Should I Dispose of Fire-and-Forget Tasks in the TPL?

작업 병렬 라이브러리를 사용한 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()를 호출하지 않아도 됩니다. 경우?

대부분의 경우 예, Dispose()를 호출하지 않아도 괜찮습니다. 종료자가 정리를 처리합니다.

  • 이에 대해 설명하는 문서가 있습니까?

예, Stephen Toub의 블로그 게시물에 자세한 설명이 나와 있습니다.

  • Task 객체를 처리하는 적절한 방법이 있나요? 내가 놓친 것이 있나요?

Dispose()를 호출하는 것은 대부분의 시나리오에서 필요하지 않습니다.

  • fire & 잊어버리는 다른 방법이 있습니까? TPL이 포함된 작업이 있나요?

아니요, 사용 패턴은 Task.Factory.StartNew()는 실행 후 잊어버리는 작업에 권장되는 접근 방식입니다.

위 내용은 TPL에서 Fire-and-Forget 작업을 폐기해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.