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)

返回

IEnumerable<Task>

一个允许调试器遍历当前排队到此计划程序中的任务的枚举。

属性

例外

此计划程序无法在此时生成排队任务的列表。

注解

派生自 TaskScheduler 实现此方法的类,以支持与调试器的集成。 仅当调试器请求访问数据时,.NET Framework才会调用此方法。 返回的可枚举将通过调试实用工具遍历,以访问当前排队到此计划程序的任务,使调试器能够在用户界面中提供此信息的表示形式。

请务必注意,调用此方法时,进程中的所有其他线程都将冻结。 因此,请务必避免与其他可能导致阻塞的线程同步。 如果需要同步,并且无法获取此方法中的锁,则应引发异常,以便调试器不会阻止。 以下示例显示了 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);  
    }}  

此外,此方法和返回的可枚举项不得修改任何全局可见状态。

返回的枚举不应为 null。 如果当前没有排队的任务,应改为返回空枚举。

实现自定义调试器的开发人员不应直接调用此方法,而是应改用内部包装器方法GetScheduledTasksForDebuggerinternal Task[] GetScheduledTasksForDebugger() 此包装器方法返回任务数组,而不是可枚举的数组。 若要检索活动计划程序的列表,请使用内部方法 internal static TaskScheduler[] GetTaskSchedulersForDebugger()。 此静态方法返回所有活动 TaskScheduler 实例的数组。 然后 GetScheduledTasksForDebugger ,可以在每个计划程序实例上使用,以检索其计划任务列表。

适用于

另请参阅