Bahasa

TaskScheduler.GetScheduledTasks Metode

Definisi

Hanya untuk dukungan debugger, menghasilkan enumerable Task instans yang saat ini diantrekan ke penjadwal yang menunggu untuk dijalankan.

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)

Mengembalikan

Enumerable yang memungkinkan debugger untuk melintasi tugas yang saat ini diantrekan ke penjadwal ini.

Atribut

Pengecualian

Penjadwal ini tidak dapat menghasilkan daftar tugas yang diantrekan saat ini.

Keterangan

Kelas yang berasal dari TaskScheduler mengimplementasikan metode ini untuk mendukung integrasi dengan debugger. Metode ini hanya akan dipanggil oleh .NET Framework ketika debugger meminta akses ke data. Enumerable yang dikembalikan akan dilalui oleh utilitas debugging untuk mengakses tugas yang saat ini diantrekan ke penjadwal ini, memungkinkan debugger untuk memberikan representasi informasi ini di antarmuka pengguna.

Penting untuk dicatat bahwa, ketika metode ini dipanggil, semua utas lain dalam proses akan dibekukan. Oleh karena itu, penting untuk menghindari sinkronisasi dengan utas lain yang dapat menyebabkan pemblokiran. Jika sinkronisasi diperlukan, dan Anda tidak dapat memperoleh kunci dalam metode ini, maka Anda harus melemparkan pengecualian sehingga debugger tidak memblokir. Contoh berikut menunjukkan satu pendekatan yang mungkin dalam 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);
    }}

Selain itu, metode ini dan enumerable yang dikembalikan tidak boleh mengubah status yang terlihat secara global.

Enumerable yang dikembalikan tidak boleh null. Jika saat ini tidak ada tugas yang diantrekan, enumerable kosong harus dikembalikan sebagai gantinya.

Pengembang yang menerapkan debugger kustom tidak boleh memanggil metode ini secara langsung, tetapi harus menggunakan metode GetScheduledTasksForDebugger pembungkus internal sebagai gantinya: internal Task[] GetScheduledTasksForDebugger(). Metode pembungkus ini mengembalikan array tugas alih-alih enumerable. Untuk mengambil daftar penjadwal aktif, gunakan metode internal static TaskScheduler[] GetTaskSchedulersForDebugger()internal . Metode statis ini mengembalikan array dari semua instans aktif TaskScheduler . Anda kemudian dapat menggunakan GetScheduledTasksForDebugger pada setiap instans penjadwal untuk mengambil daftar tugas terjadwalnya.

Berlaku untuk

Lihat juga