更新:2007 年 11 月
提供一些方法,这些方法允许宿主发出公共语言运行库 (CLR) 请求,或者向 CLR 提供有关相关联任务的通知。
interface ICLRTask : IUnknown {
HRESULT Abort ();
HRESULT ExitTask ();
HRESULT GetMemStats (
[out] COR_GC_THREAD_STATS *pMemUsage
);
HRESULT LocksHeld (
[out] SIZE_T *pLockCount
);
HRESULT NeedsPriorityScheduling (
[out] BOOL *pbNeedsPriorityScheduling
);
HRESULT Reset (
[in] BOOL fFull
);
HRESULT RudeAbort ();
HRESULT SetTaskIdentifier (
[in] DWORD asked
);
HRESULT SwitchIn (
[in] HANDLE threadHandle
);
HRESULT SwitchOut ();
HRESULT YieldTask ();
}
方法
方法 |
说明 |
---|---|
请求 CLR 中止当前 ICLRTask 实例表示的任务。 |
|
通知 CLR 与当前 ICLRTask 实例关联的任务即将结束,并尝试正常关闭该任务。 |
|
获取有关当前 ICLRTask 实例表示的任务的内存资源使用情况的统计信息。 |
|
获取任务当前持有的锁的数量。 |
|
获取一个值,该值指示主机是否应为重新安排由当前 ICLRTask 实例表示的任务分配一个高优先级。 |
|
通知 CLR 宿主已完成一个任务,并使 CLR 重用当前的 ICLRTask 实例以表示其他任务。 |
|
使 CLR 立即中止由当前 ICLRTask 实例表示的任务,但不会保证将执行终结器。 |
|
为当前 ICLRTask 实例表示的任务设置唯一的标识符,以便在调试中使用。 |
|
通知 CLR 由当前 ICLRTask 实例表示的任务处于可操作状态。 |
|
通知 CLR 由当前 ICLRTask 实例表示的任务不再处于可操作状态。 |
|
请求 CLR 分配处理器时间供其他任务使用。CLR 不保证任务将处于它可以产生处理时间的状态。 |
备注
ICLRTask 是 CLR 任务的表示形式。在执行代码期间的任意时间点,既可以将任务描述为正在运行,也可以将其描述为正在等待运行。宿主调用 ICLRTask::SwitchIn 方法以通知 CLR 当前 ICLRTask 实例所表示的任务现在正处于可操作状态。调用 ICLRTask::SwitchIn 之后,宿主可以在任何操作系统线程上安排任务,但在运行库需要线程关联(由 IHostTaskManager::BeginThreadAffinity 和 IHostTaskManager::EndThreadAffinity 方法调用指定)的情况下除外。一段时间后,操作系统可能决定从线程中移除任务,并将其置于非运行状态。例如,每当任务在同步基元上阻塞或等待 I/O 操作完成时,操作系统可能会这样做。宿主调用 SwitchOut 以通知 CLR 由当前 ICLRTask 实例所表示的任务不再处于可操作状态。
任务通常会在代码执行结束时终止。那时宿主将调用 ICLRTask::ExitTask 来销毁关联的 ICLRTask。但是,还可以通过调用 ICLRTask::Reset 来回收任务,这将允许再次使用 ICLRTask 实例。此方法可避免重复创建和销毁实例的系统开销。
要求
**平台:**请参见 .NET Framework 系统要求。
**头文件:**MSCorEE.idl
**库:**作为一项资源包含在 MSCorEE.dll 中
**.NET Framework 版本:**3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0