通知通用語言執行時(CLR)主機已完成任務,並允許 CLR 重用目前的 ICLRTask 實例來代表另一個任務。
語法
HRESULT Reset (
[in] BOOL fFull
);
參數
fFull[在] true,如果執行時應重置所有與執行緒相關的靜態值,以及與目前ICLRTask實例相關的安全性與位置資訊;否則,。 false
若值為 true,執行時會重置使用 AllocateDataSlot 或 AllocateNamedDataSlot儲存的資料。
傳回值
| 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 實例的正常生命週期:
執行時會建立一個新的
ICLRTask實例。執行時會呼叫 IHostTaskManager::GetCurrentTask 以取得目前主機任務的參考。
執行時會呼叫 IHostTask::SetCLRTask 來將新實例與主機任務關聯。
任務執行並完成。
主機透過呼叫
ICLRTask::ExitTask來破壞任務。
Reset 這在兩個方面改變了這個情境。 在上述步驟 5 中,主機呼叫 Reset 將任務重設為乾淨狀態,然後將實 ICLRTask 例與其對應的 IHostTask 實例解耦。 若有需要,主機也可以快取該 IHostTask 實例以便重複使用。 在上述步驟 1 中,執行時會從快取中拉取回收資料 ICLRTask ,而不是建立新的實例。
當主機同時擁有可重複使用的工作任務池時,這種方法效果良好。 當主機摧毀其中一個IHostTask實例時,會透過呼叫 ExitTask來銷毀對應ICLRTask的實例。
要求
平台:請參閱系統需求。
標題: MSCorEE.h
圖書館: MSCorEE.dll 中納入資源
.NET Framework 版本: 自 2.0 起可用