次の方法で共有


ICLRTask::Reset メソッド

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

構文

HRESULT Reset (
    [in] BOOL fFull
);

パラメーター

fFull [入力] true、現在の ICLRTask インスタンスに関連するセキュリティとロケールの情報に加えて、ランタイムがスレッド関連のすべての静的値をリセットする必要がある場合は false

値が true場合、ランタイムは、 AllocateDataSlot または AllocateNamedDataSlotを使用して格納されたデータをリセットします。

戻り値

HRESULT 説明
S_OK Reset が正常に返されました。
HOST_E_CLRNOTAVAILABLE CLR がプロセスに読み込まれていないか、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を呼び出し、関連付けられている IHostTask インスタンスからICLRTask インスタンスを切り離します。 必要に応じて、ホストは IHostTask インスタンスをキャッシュして再利用することもできます。 上記の手順 1 では、ランタイムは新しいインスタンスを作成するのではなく、キャッシュからリサイクルされた ICLRTask をプルします。

この方法は、ホストにも再利用可能な worker タスクのプールがある場合に適しています。 ホストは、IHostTaskインスタンスの 1 つを破棄するときに、ExitTaskを呼び出すことによって対応するICLRTaskを破棄します。

必要条件

:システム要件」を参照してください。

ヘッダ: MSCorEE.h

図書館: MSCorEE.dll にリソースとして含まれる

.NET Framework のバージョン: 2.0 以降で利用可能

こちらも参照ください