TaskScheduler.GetScheduledTasks Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
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ń.