ICLRTask::重置方法

通知通用語言執行時(CLR)主機已完成任務,並允許 CLR 重用目前的 ICLRTask 實例來代表另一個任務。

語法

HRESULT Reset (
    [in] BOOL fFull
);

參數

fFull[在] true,如果執行時應重置所有與執行緒相關的靜態值,以及與目前ICLRTask實例相關的安全性與位置資訊;否則,。 false

若值為 true,執行時會重置使用 AllocateDataSlotAllocateNamedDataSlot儲存的資料。

傳回值

HRESULT 說明
S_OK Reset 成功返回。
HOST_E_CLRNOTAVAILABLE CLR 尚未載入程序,或處於無法執行受管程式碼或處理呼叫的狀態。 成功
HOST_E_TIMEOUT 通話時間過了。
HOST_E_NOT_OWNER 來電者並不擁有鎖具。
HOST_E_ABANDONED 事件在阻塞的執行緒或光纖等待時被取消。
E_FAIL 發生了一場未知的災難性故障。 當方法返回E_FAIL時,CLR 在程序中不再可用。 後續呼叫主機方法時會返回HOST_E_CLRNOTAVAILABLE。

備註

CLR 可以回收先前建立 ICLRTask 的實例,以避免每次需要新任務時重複建立新實例的負擔。 當主機完成任務時,會透過呼叫 ICLRTask::Reset 而非 ICLRTask::ExitTask 來啟用此功能。 以下列表總結了一個 ICLRTask 實例的正常生命週期:

  1. 執行時會建立一個新的 ICLRTask 實例。

  2. 執行時會呼叫 IHostTaskManager::GetCurrentTask 以取得目前主機任務的參考。

  3. 執行時會呼叫 IHostTask::SetCLRTask 來將新實例與主機任務關聯。

  4. 任務執行並完成。

  5. 主機透過呼叫 ICLRTask::ExitTask來破壞任務。

Reset 這在兩個方面改變了這個情境。 在上述步驟 5 中,主機呼叫 Reset 將任務重設為乾淨狀態,然後將實 ICLRTask 例與其對應的 IHostTask 實例解耦。 若有需要,主機也可以快取該 IHostTask 實例以便重複使用。 在上述步驟 1 中,執行時會從快取中拉取回收資料 ICLRTask ,而不是建立新的實例。

當主機同時擁有可重複使用的工作任務池時,這種方法效果良好。 當主機摧毀其中一個IHostTask實例時,會透過呼叫 ExitTask來銷毀對應ICLRTask的實例。

要求

平台:請參閱系統需求

標題: MSCorEE.h

圖書館: MSCorEE.dll 中納入資源

.NET Framework 版本: 自 2.0 起可用

另請參閱