TaskScheduler.GetScheduledTasks メソッド

定義

デバッガーサポートの場合のみ、現在スケジューラの実行を待機している 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 にすることはできません。 現在キューに登録されているタスクがない場合は、代わりに空の列挙可能な値を返す必要があります。

カスタム デバッガーを実装している開発者は、このメソッドを直接呼び出す必要はありませんが、代わりに内部ラッパー メソッド GetScheduledTasksForDebugger を使用する必要があります: internal Task[] GetScheduledTasksForDebugger()。 このラッパー メソッドは、列挙可能ではなくタスクの配列を返します。 アクティブなスケジューラの一覧を取得するには、内部メソッド internal static TaskScheduler[] GetTaskSchedulersForDebugger()を使用します。 この静的メソッドは、アクティブなすべての TaskScheduler インスタンスの配列を返します。 その後、各スケジューラ インスタンスで GetScheduledTasksForDebugger を使用して、スケジュールされたタスクの一覧を取得できます。

適用対象

こちらもご覧ください