次の方法で共有


ICLRTask::Reset メソッド

ホストがタスクを完了したことを共通言語ランタイム (CLR: Common Language Runtime) に通知し、CLR が現在の ICLRTask インスタンスを再利用して別のタスクを表現できるようにします。

HRESULT Reset (
    [in] BOOL fFull
);

パラメーター

  • fFull
    [入力] ランタイムが、現在の 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::ExitTask の代わりに ICLRTask::Reset を呼び出します。 以下は、ICLRTask インスタンスの通常のライフ サイクルをまとめた一覧です。

  1. ランタイムは新しい ICLRTask インスタンスを作成します。

  2. ランタイムは IHostTaskManager::GetCurrentTask を呼び出して、現在のホスト タスクへの参照を取得します。

  3. ランタイムは IHostTask::SetCLRTask を呼び出して、新しいインスタンスをホスト タスクと関連付けます。

  4. タスクを実行し、終了します。

  5. ホストは、ICLRTask::ExitTask を呼び出してタスクを破棄します。

Reset は、このシナリオを 2 つの方法で変更します。 前の手順 5. で、ホストは Reset を呼び出してタスクをクリーンな状態にリセットします。次に、ICLRTask インスタンスをそれが関連付けられている IHostTask インスタンスから切り離します。 必要に応じて、ホストは 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 インターフェイス