TaskScheduler.GetScheduledTasks Метод

Определение

Создает перечисляемый объект экземпляров Task, которые в настоящее время находятся в очереди планировщика, ожидая выполнения (только для поддержки отладки).For debugger support only, generates an enumerable of Task instances currently queued to the scheduler waiting to be executed.

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]
protected abstract System.Collections.Generic.IEnumerable<System.Threading.Tasks.Task> GetScheduledTasks ();
abstract member GetScheduledTasks : unit -> seq<System.Threading.Tasks.Task>
[<System.Security.SecurityCritical>]
abstract member GetScheduledTasks : unit -> seq<System.Threading.Tasks.Task>
Protected MustOverride Function GetScheduledTasks () As IEnumerable(Of Task)

Возвращаемое значение

IEnumerable<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#:The following example shows one possible approach in C#:

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);  
    }}  

Кроме того, этот метод и возвращаемое перечислимое значение не должны изменять глобально видимое состояние.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.

Применяется к

См. также раздел