TaskScheduler.GetScheduledTasks Metoda

Definicja

W przypadku obsługi tylko debugera generuje wyliczanie Task wystąpień aktualnie w kolejce do harmonogramu oczekującego na wykonanie.

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)

Zwraca

IEnumerable<Task>

Wyliczenie, które umożliwia debugerowi przechodzenie zadań aktualnie w kolejce do tego harmonogramu.

Atrybuty

Wyjątki

Ten harmonogram nie może obecnie wygenerować listy zadań w kolejce.

Uwagi

Klasa pochodząca z TaskScheduler implementacji tej metody w celu obsługi integracji z debugerami. Ta metoda zostanie wywołana przez .NET Framework tylko wtedy, gdy debuger żąda dostępu do danych. Zwrócony wyliczenie zostanie przekazany przez narzędzia debugowania w celu uzyskania dostępu do zadań aktualnie w kolejce do tego harmonogramu, co umożliwi debugerowi przedstawienie tych informacji w interfejsie użytkownika.

Należy pamiętać, że po wywołaniu tej metody wszystkie inne wątki w procesie zostaną zamrożone. Dlatego ważne jest, aby uniknąć synchronizacji z innymi wątkami, które mogą prowadzić do blokowania. Jeśli synchronizacja jest konieczna i nie możesz uzyskać blokady w tej metodzie, należy zgłosić wyjątek, aby debuger nie blokował. W poniższym przykładzie pokazano jedno możliwe podejście w języku 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);  
    }}  

Ponadto ta metoda i zwrócony wyliczenie nie mogą modyfikować żadnego stanu widocznego globalnie.

Zwrócony wyliczenie nigdy nie powinien mieć wartości null. Jeśli obecnie nie ma żadnych zadań w kolejce, zamiast tego powinna zostać zwrócona pusta wyliczenie.

Deweloperzy, którzy implementują niestandardowe debugery, nie powinni wywoływać tej metody bezpośrednio, ale powinni użyć metody GetScheduledTasksForDebugger wewnętrznej otoki: internal Task[] GetScheduledTasksForDebugger(). Ta metoda otoki zwraca tablicę zadań zamiast wyliczalnych. Aby pobrać listę aktywnych harmonogramów, użyj metody internal static TaskScheduler[] GetTaskSchedulersForDebugger()wewnętrznej . Ta metoda statyczna zwraca tablicę wszystkich aktywnych TaskScheduler wystąpień. Następnie można użyć dla GetScheduledTasksForDebugger każdego wystąpienia harmonogramu, aby pobrać jego listę zaplanowanych zadań.

Dotyczy

Zobacz też