Bagikan melalui


Menggunakan Jendela Tugas (C#, Visual Basic)

Jendela Tugas menyerupai jendela Utas , kecuali menampilkan informasi tentang tugas asinkron yang dibuat menggunakan pola asinkron/tunggu, juga disebut pola asinkron berbasis Tugas (TAP) alih-alih informasi berbasis utas. Seperti utas, tugas mewakili operasi asinkron yang dapat berjalan bersamaan; namun, beberapa tugas dapat berjalan pada utas yang sama.

Dalam kode .NET, Anda dapat menggunakan jendela Tugas saat bekerja dengan aplikasi menggunakan pola asinkron/tunggu (Tunggu dan Asinkron di VisualBasic). Namun, tampilan Tugas di jendela Tumpukan Paralel sering lebih membantu untuk men-debug aplikasi asinkron. Untuk informasi selengkapnya, lihat Men-debug aplikasi asinkron.

Dalam kode .NET, Anda dapat menggunakan jendela Tugas saat bekerja dengan aplikasi menggunakan pola asinkron/tunggu (Tunggu dan Asinkron di VisualBasic). Namun, tampilan Tugas di jendela Tumpukan Paralel sering lebih membantu untuk men-debug aplikasi asinkron. Untuk informasi selengkapnya, lihat Utas dan tugas di jendela Tumpukan Paralel.

Tip

Untuk kode C/C++, gunakan tampilan Utas di jendela Tumpukan Paralel saat Anda perlu men-debug grup tugas, algoritma paralel, agen asinkron, dan tugas ringan. Untuk informasi selengkapnya, lihat Utas dan tugas di jendela Tumpukan Paralel.

Anda dapat menggunakan jendela Tugas setiap kali Anda masuk ke debugger. Anda dapat mengaksesnya pada menu Debug dengan mengklik Windows lalu mengklik Tugas. Ilustrasi berikut ini memperlihatkan jendela Tugas dalam mode defaultnya.

Jendela tugas

Jendela tugas

Nota

Dalam kode terkelola, Task yang memiliki status TaskStatus.Created, TaskStatus.WaitingForActivation, atau TaskStatus.WaitingToRun mungkin tidak ditampilkan di jendela Tugas saat utas terkelola dalam keadaan sleep atau join.

Informasi Kolom Tugas

Kolom di jendela Tugas memperlihatkan informasi berikut ini.

Nama Kolom Deskripsi
Bendera Memperlihatkan tugas mana yang ditandai dan memungkinkan Anda menandai atau membatalkan bendera tugas.
Ikon Panah kuning Panah kuning menunjukkan tugas saat ini. Tugas saat ini adalah tugas paling atas di utas saat ini.

Panah hijau Panah hijau menunjukkan konteks debugger saat ini (mengikuti peralihan ke tugas di debugger).

Panah putih Panah putih menunjukkan tugas pemecahan, yaitu, yang ada saat ini ketika debugger dipanggil.

Ikon Jeda Ikon jeda menunjukkan tugas yang telah dibekukan oleh pengguna. Anda dapat membekukan dan mencairkan tugas dengan mengklik kanan dalam daftar.
ID Nomor yang disediakan sistem untuk tugas tersebut. Dalam kode asli, ini adalah alamat tugas.
Keadaan Status saat ini (terjadwal, aktif, diblokir, di-deadlock, menunggu, atau selesai) tugas.

Status Terjadwal Dijadwalkan. Pekerjaan terjadwal adalah pekerjaan yang belum dijalankan dan, oleh karena itu, belum memiliki tumpukan panggilan, thread yang dialokasikan, atau informasi terkait.

Status Aktif Aktif. Tugas aktif adalah tugas yang menjalankan kode sebelum berhenti di debugger.

Status Diblokir Diblokir. Tugas yang diblokir adalah tugas yang diblokir karena menunggu peristiwa untuk diberi sinyal, kunci yang akan dilepaskan, atau tugas lain untuk diselesaikan.

Status Menunggu Menunggu. Tugas menunggu yang tidak memblokir dan menggunakan pola async/await.

Status Terkunci Kebuntuan. Simbol kebuntuan mengacu pada tugas tunggu yang utas terkaitnya mengalami kebuntuan dengan utas lain.

Arahkan mouse ke atas sel Status untuk melihat informasi selengkapnya tentang blok. Peringatan: Jendela Tugas melaporkan kebuntuan hanya untuk tugas yang diblokir yang menggunakan primitif sinkronisasi yang didukung oleh Wait Chain Traversal (WCT). Misalnya, untuk objek Task yang mengalami deadlock dan menggunakan WCT, debugger melaporkan Menunggu-deadlock. Untuk tugas yang mengalami macet dan dikelola oleh Konkuren Runtime, yang tidak menggunakan WCT, alat debug melaporkan Menunggu. Untuk informasi selengkapnya tentang WCT, lihat Wait Chain Traversal.
Waktu Mulai Waktu ketika tugas mulai aktif.
Durasi Jumlah detik saat tugas telah aktif.
Waktu Penyelesaian Waktu penyelesaian tugas.
Tempat Posisi saat ini di tumpukan panggilan tugas. Arahkan mouse ke atas sel ini untuk melihat seluruh tumpukan panggilan untuk tugas tersebut. Tugas terjadwal tidak memiliki nilai dalam kolom ini.
Tugas Metode awal dan argumen apa pun yang diteruskan ke tugas saat dibuat.
AsyncState Untuk kode terkelola, status tugas. Secara default, kolom ini disembunyikan. Untuk menampilkan kolom ini, buka menu konteks untuk salah satu header kolom. Pilih Kolom, AsyncState.
Orang Tua ID tugas yang membuat tugas ini. Jika kosong, tugas tidak memiliki orang tua. Ini hanya berlaku untuk program terkelola.
Penetapan Utas ID dan nama utas tempat tugas dijalankan.
AppDomain Untuk kode terkelola, domain aplikasi tempat tugas dijalankan.
task_group Untuk kode asli, alamat objek task_group yang menjadwalkan tugas. Untuk agen asinkron dan tugas ringan, kolom ini diatur ke 0.
Proses ID proses yang dijalankan tugas.

Anda bisa menambahkan kolom ke tampilan dengan mengklik kanan judul kolom lalu memilih kolom yang Anda inginkan. (Hapus kolom dengan mengosongkan pilihan.) Anda juga dapat menyusun ulang kolom dengan menyeretnya ke kiri atau kanan. Menu pintasan kolom diperlihatkan dalam ilustrasi berikut.

Menu tampilan pintasan di jendela Tugas

Menu tampilan pintasan di jendela Tugas

Mengurutkan Tugas

Untuk mengurutkan tugas menurut kriteria kolom, klik header kolom. Misalnya, dengan mengklik header kolom ID , Anda bisa mengurutkan tugas menurut ID tugas: 1,2,3,4,5 dan sebagainya. Untuk membalikkan urutan pengurutan, klik header kolom lagi. Kolom pengurutan saat ini dan urutan pengurutan ditunjukkan oleh panah pada kolom.

Mengelompokkan Tugas

Anda bisa mengelompokkan tugas berdasarkan kolom apa pun dalam tampilan daftar. Misalnya, dengan mengklik kanan header kolom Status lalu mengklik Kelompokkan menurut>[status], Anda dapat mengelompokkan semua tugas yang memiliki status yang sama. Misalnya, Anda dapat dengan cepat melihat tugas yang menunggu sehingga Anda dapat fokus pada mengapa tugas tersebut diblokir. Anda juga dapat menciutkan grup yang tidak menarik selama sesi debug. Dengan cara yang sama, Anda dapat mengelompokkan menurut kolom lain. Grup dapat (tidak) ditandai cukup dengan mengklik tombol di samping judul grup. Ilustrasi berikut ini memperlihatkan jendela Tugas dalam mode yang dikelompokkan.

Mode Terkelompok di Jendela Tugas

Mode Terkelompok di Jendela Tugas

Tampilan Induk-Anak

(Tampilan ini hanya tersedia untuk kode terkelola.) Dengan mengklik kanan header kolom Status lalu mengklik Kelompokkan menurut>Induk, Anda bisa mengubah daftar tugas menjadi tampilan hierarkis, di mana setiap tugas anak adalah sub-simpul yang dapat ditampilkan atau disembunyikan di bawah induknya.

Tugas Penandaan

Anda dapat menandai utas tugas tempat tugas sedang dijalankan dengan memilih item daftar tugas lalu memilih Tandai Utas yang Ditetapkan dari menu konteks, atau dengan mengklik ikon tanda di kolom pertama. Jika Anda menandai beberapa tugas, Anda kemudian dapat mengurutkan pada kolom bendera untuk membawa semua tugas yang ditandai ke bagian atas sehingga Anda bisa fokus pada tugas tersebut. Anda juga dapat menggunakan jendela Tumpukan Paralel untuk melihat hanya tugas yang ditandai. Ini memungkinkan Anda memfilter tugas yang tidak Anda minati untuk debugging. Penanda tidak disimpan di antara sesi penelusuran kesalahan.

Tugas Pembekuan dan Pencairan

Anda dapat membekukan utas tempat tugas dijalankan dengan mengklik kanan item daftar tugas lalu mengklik Bekukan Utas yang Ditetapkan. (Jika tugas sudah dibekukan, perintahnya adalah Thaw Assigned Thread.) Ketika Anda membekukan utas, utas tersebut tidak akan dijalankan ketika Anda melewati kode setelah titik henti saat ini. Perintah Freeze All Threads But This One membekukan semua utas kecuali yang mengeksekusi item dalam daftar tugas.

Ilustrasi berikut ini memperlihatkan item menu lainnya untuk setiap tugas.

Menu utas pintasan di jendela Tugas

Menu utas pintasan di jendela Tugas

Mengalihkan Tugas Atau Bingkai Aktif

Perintah Beralih ke Tugas menjadikan tugas saat ini sebagai tugas aktif. Perintah Beralih ke Bingkai menjadikan bingkai tumpukan yang dipilih sebagai bingkai tumpukan aktif. Konteks dari debugger beralih ke tugas saat ini atau ke bingkai tumpukan yang dipilih.