다음을 통해 공유


ICLRTask::Reset 메서드

호스트가 작업을 완료했음을 CLR(공용 언어 런타임)에 알리고 CLR이 현재 ICLRTask 인스턴스를 다시 사용하여 다른 작업을 나타낼 수 있도록 합니다.

구문

HRESULT Reset (  
    [in] BOOL fFull  
);  

매개 변수

fFull
[in] 런타임이 현재 ICLRTask 인스턴스와 관련된 보안 및 로캘 정보 외에 모든 스레드 관련 정적 값을 다시 설정해야 하는 경우 true입니다. 그렇지 않으면 false입니다.

값이 true이면 런타임은 AllocateDataSlot 또는 AllocateNamedDataSlot을 사용하여 저장된 데이터를 다시 설정합니다.

Return Value

HRESULT 설명
S_OK Reset가 성공적으로 반환되었습니다.
HOST_E_CLRNOTAVAILABLE CLR이 프로세스에 로드되지 않았거나 CLR이 관리 코드를 실행하거나 호출을 처리할 수 없는 상태에 있습니다. 성공
HOST_E_TIMEOUT 호출 시간이 초과되었습니다.
HOST_E_NOT_OWNER 호출자는 잠금을 소유하지 않습니다.
HOST_E_ABANDONED 차단된 스레드 또는 파이버가 이벤트를 기다리는 동안 이벤트가 취소되었습니다.
E_FAIL 알 수 없는 치명적인 오류가 발생했습니다. 메서드가 E_FAIL을 반환하면 CLR은 더 이상 프로세스 내에서 사용할 수 없습니다. 호스팅 메서드에 대한 후속 호출은 HOST_E_CLRNOTAVAILABLE을 반환합니다.

설명

CLR은 이전에 만든 ICLRTask 인스턴스를 재활용하여 새 작업이 필요할 때마다 반복적으로 새 인스턴스를 만드는 오버헤드를 방지할 수 있습니다. 호스트는 작업을 완료했을 때 ICLRTask::ExitTask 대신 ICLRTask::Reset을 호출하여 이 기능을 사용하도록 설정합니다. 다음 목록에는 ICLRTask 인스턴스의 일반적인 수명 주기가 요약되어 있습니다.

  1. 런타임은 새 ICLRTask 인스턴스를 만듭니다.

  2. 런타임은 IHostTaskManager::GetCurrentTask를 호출하여 현재 호스트 작업에 대한 참조를 가져옵니다.

  3. 런타임은 IHostTask::SetCLRTask를 호출하여 새 인스턴스를 호스트 작업과 연결합니다.

  4. 작업이 실행되고 완료됩니다.

  5. 호스트는 ICLRTask::ExitTask를 호출하여 작업을 삭제합니다.

Reset은 두 가지 방법으로 이 시나리오를 변경합니다. 위의 5단계에서 호스트는 Reset을 호출하여 작업을 정리 상태로 다시 설정한 다음, 연결된 IHostTask 인스턴스에서 ICLRTask 인스턴스를 분리합니다. 원하는 경우 호스트는 다시 사용하기 위해 IHostTask 인스턴스를 캐시할 수도 있습니다. 위의 1단계에서 런타임은 새 인스턴스를 만드는 대신 캐시에서 재활용된 ICLRTask 리소스를 풀합니다.

이 접근 방식은 호스트에 재사용 가능한 작업자 작업 풀이 있는 경우 잘 작동합니다. 호스트는 해당 IHostTask 인스턴스 중 하나를 삭제할 때 ExitTask를 호출하여 해당 ICLRTask 인스턴스를 삭제합니다.

요구 사항

플랫폼:시스템 요구 사항을 참조하세요.

헤더: MSCorEE.h

라이브러리: 리소스로 MSCorEE.dll에 포함됩니다.

.NET Framework 버전: 2.0부터 사용 가능

참고 항목