TaskScheduler.GetScheduledTasks 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
디버거를 지원하기 위해 현재 스케줄러의 큐에 대기되어 실행을 기다리고 있는 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 호출됩니다. 반환되는 열거 가능 항목은 유틸리티를 디버깅하여 현재 이 스케줄러에 큐에 대기 중인 작업에 액세스하여 디버거가 사용자 인터페이스에서 이 정보의 표현을 제공할 수 있도록 합니다.
이 메서드가 호출되면 프로세스의 다른 모든 스레드가 고정됩니다. 따라서 차단으로 이어질 수 있는 다른 스레드와의 동기화를 피하는 것이 중요합니다. 동기화가 필요하고 이 메서드에서 잠금을 가져올 수 없는 경우 디버거가 차단되지 않도록 예외를 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
수 있습니다.