Aracılığıyla paylaş


TaskScheduler.GetScheduledTasks Yöntem

Tanım

Yalnızca hata ayıklayıcısı desteği için, şu anda yürütülmeyi bekleyen zamanlayıcıya kuyruğa alınmış örneklerin Task bir numaralandırılabilirini oluşturur.

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)

Döndürülenler

IEnumerable<Task>

Hata ayıklayıcının şu anda bu zamanlayıcıya kuyruğa alınmış olan görevlerde geçiş yapmasına olanak tanıyan bir numaralandırılabilir.

Öznitelikler

Özel durumlar

Bu zamanlayıcı şu anda kuyruğa alınan görevlerin listesini oluşturamıyor.

Açıklamalar

öğesinden TaskScheduler türetilen bir sınıf, hata ayıklayıcılarla tümleştirmeyi desteklemek için bu yöntemi uygular. Bu yöntem yalnızca hata ayıklayıcı verilere erişim istediğinde .NET Framework tarafından çağrılır. Döndürülen numaralandırılabilir, hata ayıklama yardımcı programlarının bu zamanlayıcıya şu anda kuyruğa alınmış olan görevlere erişmesi ve hata ayıklayıcının kullanıcı arabiriminde bu bilgilerin bir gösterimini sağlamasına olanak tanıyarak geçirilir.

Bu yöntem çağrıldığında, işlemdeki diğer tüm iş parçacıklarının dondurulacağını unutmayın. Bu nedenle, engellemeye yol açabilecek diğer iş parçacıklarıyla eşitlemeyi önlemek önemlidir. Eşitleme gerekliyse ve bu yöntemde kilidi alamıyorsanız, hata ayıklayıcının engellememesi için bir özel durum oluşturmalısınız. Aşağıdaki örnekte C# dilindeki olası bir yaklaşım gösterilmektedir:

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);  
    }}  

Ayrıca, bu yöntem ve döndürülen numaralandırılabilir genel olarak görünür herhangi bir durumu değiştirmemelidir.

Döndürülen numaralandırılabilir hiçbir zaman null olmamalıdır. Şu anda kuyruğa alınmış görev yoksa, bunun yerine boş bir numaralandırılabilir döndürülmelidir.

Özel hata ayıklayıcıları uygulayan geliştiricilerin bu yöntemi doğrudan çağırmaması, bunun yerine iç sarmalayıcı yöntemini GetScheduledTasksForDebugger kullanması gerekir: internal Task[] GetScheduledTasksForDebugger(). Bu sarmalayıcı yöntemi, numaralandırılabilir yerine bir görev dizisi döndürür. Etkin zamanlayıcıların listesini almak için iç yöntemini internal static TaskScheduler[] GetTaskSchedulersForDebugger()kullanın. Bu statik yöntem tüm etkin TaskScheduler örneklerin dizisini döndürür. Ardından, zamanlanmış görevlerin listesini almak için her zamanlayıcı örneğinde kullanabilirsiniz GetScheduledTasksForDebugger .

Şunlara uygulanır

Ayrıca bkz.