TaskScheduler.GetScheduledTasks メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
デバッガー サポートの目的でのみ、現在実行待機中のスケジューラのキューに含まれている Task インスタンスの列挙可能なコレクションを生成します。
protected:
abstract System::Collections::Generic::IEnumerable<System::Threading::Tasks::Task ^> ^ GetScheduledTasks();
[System.Security.SecurityCritical]
protected abstract System.Collections.Generic.IEnumerable<System.Threading.Tasks.Task> GetScheduledTasks ();
protected abstract System.Collections.Generic.IEnumerable<System.Threading.Tasks.Task>? GetScheduledTasks ();
protected abstract System.Collections.Generic.IEnumerable<System.Threading.Tasks.Task> GetScheduledTasks ();
[<System.Security.SecurityCritical>]
abstract member GetScheduledTasks : unit -> seq<System.Threading.Tasks.Task>
abstract member GetScheduledTasks : unit -> seq<System.Threading.Tasks.Task>
Protected MustOverride Function GetScheduledTasks () As IEnumerable(Of Task)
戻り値
デバッガーがこのスケジューラのキューに現在含まれているタスクを走査できるようにする列挙可能なコレクション。
- 属性
例外
このスケジューラは、この時点でキューにあるタスクの一覧を生成できません。
注釈
デバッガーとの統合をサポートするために、このメソッドを実装するクラスから TaskScheduler 派生します。 このメソッドは、デバッガーがデータへのアクセスを要求した場合にのみ、.NET Frameworkによって呼び出されます。 返される列挙可能な値は、このスケジューラに現在キューに登録されているタスクにアクセスするためにデバッグ ユーティリティによって走査され、デバッガーはユーザー インターフェイスでこの情報の表現を提供できます。
このメソッドが呼び出されると、プロセス内の他のすべてのスレッドが凍結されることに注意することが重要です。 そのため、ブロックにつながる可能性がある他のスレッドとの同期を避ける必要があります。 同期が必要で、このメソッドのロックを取得できない場合は、デバッガーがブロックしないように例外をスローする必要があります。 次の例は、C# で考えられる 1 つのアプローチを示しています。
protected override IEnumerable<Task> GetScheduledTasks()
{
bool lockTaken = false;
try
{
Monitor.TryEnter(_syncObj, ref lockTaken);
if (lockTaken)
{
return _tasks.ToArray();
}
else throw new NotSupportedException();
}
finally
{
if (lockTaken) Monitor.Exit(_syncObj);
}}
さらに、このメソッドと返される列挙可能なメソッドは、グローバルに表示される状態を変更することはできません。
返される列挙可能な値を null にしないでください。 現在キューに登録されているタスクがない場合は、代わりに空の列挙可能な値を返す必要があります。
カスタム デバッガーを実装している開発者は、このメソッドを直接呼び出す必要はありませんが、代わりにinternal Task[] GetScheduledTasksForDebugger()
内部ラッパー メソッドGetScheduledTasksForDebugger
を使用する必要があります。 このラッパー メソッドは、列挙可能ではなくタスクの配列を返します。 アクティブなスケジューラの一覧を取得するには、内部メソッド internal static TaskScheduler[] GetTaskSchedulersForDebugger()
を使用します。 この静的メソッドは、すべてのアクティブ TaskScheduler なインスタンスの配列を返します。 その後、各スケジューラ インスタンスで使用 GetScheduledTasksForDebugger
して、スケジュールされたタスクの一覧を取得できます。