ICLRTask::Reset 方法
通知公共语言运行时 (CLR) 宿主已完成一个任务,并使 CLR 能够重用当前的 ICLRTask 实例以表示其他任务。
HRESULT Reset (
[in] BOOL fFull
);
参数
fFull
[in] 如果运行时应重置除与当前 ICLRTask 实例有关的安全和区域设置信息之外所有线程有关的静态值,则为 true;否则为 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 将任务重置为空白状态,然后从其关联的 IHostTask 实例中分离 ICLRTask 实例。 如果需要,宿主也可以缓存 IHostTask 实例以备重用。 在上面的步骤 1 中,运行时将已回收的 ICLRTask 从缓冲区中拉出,而不是创建新的实例。
当宿主还有一个可重用的辅助任务池时,此方法能正常工作。 宿主销毁 IHostTask 实例之一时,它通过调用 ExitTask 销毁相应的 ICLRTask。
要求
**平台:**请参见 .NET Framework 系统要求。
**头文件:**MSCorEE.h
**库:**作为一项资源包含在 MSCorEE.dll 中
**.NET Framework 版本:**4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0