다음을 통해 공유


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 호출됩니다. 반환되는 열거 가능 항목은 유틸리티를 디버깅하여 현재 이 스케줄러에 큐에 대기 중인 작업에 액세스하여 디버거가 사용자 인터페이스에서 이 정보의 표현을 제공할 수 있도록 합니다.

이 메서드가 호출되면 프로세스의 다른 모든 스레드가 고정됩니다. 따라서 차단으로 이어질 수 있는 다른 스레드와의 동기화를 피하는 것이 중요합니다. 동기화가 필요하고 이 메서드에서 잠금을 가져올 수 없는 경우 디버거가 차단되지 않도록 예외를 throw해야 합니다. 다음 예제에서는 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이 되어서는 안 됩니다. 현재 대기 중인 작업이 없는 경우 빈 열거형을 대신 반환해야 합니다.

사용자 지정 디버거를 구현하는 개발자는 이 메서드를 직접 호출하지 말고 내부 래퍼 메서드 GetScheduledTasksForDebugger 를 대신 internal Task[] GetScheduledTasksForDebugger()사용해야 합니다. 이 래퍼 메서드는 열거형이 아닌 작업의 배열을 반환합니다. 활성 스케줄러 목록을 검색하려면 내부 메서드 internal static TaskScheduler[] GetTaskSchedulersForDebugger()를 사용합니다. 이 정적 메서드는 모든 활성 TaskScheduler 인스턴스의 배열을 반환합니다. 그런 다음 각 스케줄러 인스턴스에서 예약된 작업 목록을 검색하는 데 사용할 GetScheduledTasksForDebugger 수 있습니다.

적용 대상

추가 정보