ICLRTask::Reset 方法

通知公共语言运行时 (CLR) 宿主已完成一个任务,并使 CLR 能够重用当前的 ICLRTask 实例以表示其他任务。

HRESULT Reset (
    [in] BOOL fFull
);

参数

  • fFull
    [in] 如果运行时应重置除与当前 ICLRTask 实例有关的安全和区域设置信息之外所有线程有关的静态值,则为 true;否则为 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 将任务重置为空白状态,然后从其关联的 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

请参见

参考

ICLRTask 接口

ICLRTaskManager 接口

IHostTask 接口

IHostTaskManager 接口