TaskScheduler.GetScheduledTasks メソッド


デバッガー サポートの目的でのみ、現在実行待機中のスケジューラのキューに含まれている Task インスタンスの列挙可能なコレクションを生成します。For debugger support only, generates an enumerable of Task instances currently queued to the scheduler waiting to be executed.

 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 ();
protected abstract System.Collections.Generic.IEnumerable<System.Threading.Tasks.Task> GetScheduledTasks ();
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)



デバッガーがこのスケジューラのキューに現在含まれているタスクを走査できるようにする列挙可能なコレクション。An enumerable that allows a debugger to traverse the tasks currently queued to this scheduler.



このスケジューラは、この時点でキューにあるタスクの一覧を生成できません。This scheduler is unable to generate a list of queued tasks at this time.


から派生したクラスは、 TaskScheduler デバッガーとの統合をサポートするために、このメソッドを実装します。A class derived from TaskScheduler implements this method in order to support integration with debuggers. このメソッドは、デバッガーがデータへのアクセスを要求した場合にのみ .NET Framework によって呼び出されます。This method will only be invoked by the .NET Framework when the debugger requests access to the data. 返される列挙型は、このスケジューラに現在キューに置かれているタスクにアクセスするためにデバッグユーティリティによってスキャンされます。これにより、デバッガーはこの情報をユーザーインターフェイスに表示できます。The enumerable returned will be traversed by debugging utilities to access the tasks currently queued to this scheduler, enabling the debugger to provide a representation of this information in the user interface.

このメソッドが呼び出されると、プロセス内の他のすべてのスレッドが固定されることに注意してください。It is important to note that, when this method is called, all other threads in the process will be frozen. そのため、ブロックの原因となる可能性がある他のスレッドとの同期を避けることが重要です。Therefore, it's important to avoid synchronization with other threads that may lead to blocking. 同期が必要で、このメソッドでロックを取得できない場合は、デバッガーがブロックしないように例外をスローする必要があります。If synchronization is necessary, and you are unable to acquire the lock in this method, then you should throw an exception so that the debugger does not block. 次の例は、C# で考えられる1つの方法を示しています。The following example shows one possible approach in C#:

protected override IEnumerable<Task> GetScheduledTasks()  
    bool lockTaken = false;  
        Monitor.TryEnter(_syncObj, ref lockTaken);  
        if (lockTaken)  
            return _tasks.ToArray();  
        else throw new NotSupportedException();  
    if (lockTaken) Monitor.Exit(_syncObj);  

さらに、このメソッドと返される列挙体は、グローバルに表示される状態を変更することはできません。Additionally, this method and the enumerable returned must not modify any globally visible state.

返される列挙型は null にしないでください。The returned enumerable should never be null. 現在キューに登録されているタスクがない場合は、代わりに空の列挙型を返す必要があります。If there are currently no queued tasks, an empty enumerable should be returned instead.

カスタムデバッガーを実装する開発者は、このメソッドを直接呼び出す必要はありませんが、代わりに内部ラッパーメソッドを使用する必要があります。 GetScheduledTasksForDebugger internal Task[] GetScheduledTasksForDebugger()Developers who are implementing custom debuggers shouldn't call this method directly, but should use the internal wrapper method GetScheduledTasksForDebugger instead: internal Task[] GetScheduledTasksForDebugger(). このラッパーメソッドは、列挙可能なではなくタスクの配列を返します。This wrapper method returns an array of tasks instead of an enumerable. アクティブなスケジューラの一覧を取得するには、内部メソッドを使用し internal static TaskScheduler[] GetTaskSchedulersForDebugger() ます。To retrieve a list of active schedulers, use the internal method internal static TaskScheduler[] GetTaskSchedulersForDebugger(). この静的メソッドは、すべてのアクティブなインスタンスの配列を返し TaskScheduler ます。This static method returns an array of all active TaskScheduler instances. その後、 GetScheduledTasksForDebugger 各スケジューラインスタンスでを使用して、スケジュールされたタスクの一覧を取得できます。You can then use GetScheduledTasksForDebugger on each scheduler instance to retrieve its list of scheduled tasks.