[タスク] ウィンドウは [スレッド] ウィンドウに似ていますが、各スレッドではなくSystem.Threading.Tasks.Taskオブジェクトまたはtask_handle オブジェクトに関する情報が表示される点が異なります。 スレッドと同様に、タスクは同時に実行できる非同期操作を表します。ただし、同じスレッドで複数のタスクを実行できます。
マネージド コードでは、 オブジェクトを操作するとき、または System.Threading.Tasks.Task キーワードと async キーワード (VisualBasic では Await と Async) を使用するときに、[タスク] ウィンドウを使用できます。 マネージド コードのタスクの詳細については、「 並列プログラミング」を参照してください。
ネイティブ コードでは、タスク グループ、並列アルゴリズム、非同期エージェント、および軽量タスクを操作するときに、[タスク] ウィンドウを使用できます。 ネイティブ コードのタスクの詳細については、「 コンカレンシー ランタイム」を参照してください。
デバッガを使用している間は、タスクウィンドウを利用できます。 [ デバッグ ] メニューからアクセスするには、[ Windows ] をクリックし、[ タスク] をクリックします。 次の図は、既定のモードの [タスク] ウィンドウを示しています。
注
マネージド コードでは、状態が Task、TaskStatus.WaitingForActivation、または TaskStatus.WaitingToRun の状態のは、マネージド スレッドがスリープ状態または結合状態のときにタスク ウィンドウに表示されない場合があります。
タスク列の情報
[タスク] ウィンドウの列には、次の情報が表示されます。
列の名前 | 説明 |
---|---|
フラグ | フラグが設定されているタスクを示し、タスクにフラグを設定したり、フラグを解除したりできます。 |
アイコン |
![]() ![]() ![]() ![]() |
身分証明書 | タスクのシステム指定番号。 ネイティブ コードでは、これはタスクのアドレスです。 |
地位 | タスクの現在の状態 (スケジュール済み、アクティブ、ブロック済み、デッドロック済み、待機中、または完了済み)。 ![]() ![]() ![]() ![]() ![]() デッドロックまたは待機中のタスクの [状態] セルにカーソルを合わせると、ブロックに関する詳細情報が表示されます。 警告:[タスク] ウィンドウでは、待機チェーン トラバーサル (WCT) でサポートされている同期プリミティブを使用するブロックされたタスクについてのみデッドロックが報告されます。 たとえば、WCT を使用するデッドロック Task オブジェクトの場合、デバッガーは Awaiting-deadlocked を報告します。 WCT を使用しないコンカレンシー ランタイムによって管理されるデッドロックされたタスクの場合、デバッガーは 待機中と報告します。 WCT の詳細については、「待機チェーン トラバーサル」を参照してください。 |
開始時刻 | タスクがアクティブになった時刻。 |
期間 | タスクがアクティブになっている秒数。 |
完了時間 | タスクが完了した時刻。 |
場所 | タスクの呼び出し履歴内の現在の場所。 このセルにカーソルを合わせると、タスクの呼び出し履歴全体が表示されます。 スケジュールされたタスクには、この列に値がありません。 |
タスク | 最初のメソッドと、タスクの作成時にタスクに渡された引数。 |
AsyncState | マネージド コードの場合、タスクの状態。 既定では、この列は非表示になっています。 この列を表示するには、いずれかの列ヘッダーのコンテキスト メニューを開きます。 [列]、AsyncStateを選択します。 |
親 | このタスクを作成したタスクの ID。 これが空白の場合、タスクには親がありません。 これは、マネージド プログラムにのみ適用されます。 |
スレッドの割り当て | タスクが実行されているスレッドの ID と名前。 |
AppDomain | マネージド コードの場合、タスクが実行されているアプリケーション ドメイン。 |
task_group | ネイティブ コードの場合、タスクをスケジュールした task_group オブジェクトのアドレス。 非同期エージェントと軽量タスクの場合、この列は 0 に設定されます。 |
処理 | タスクが実行されているプロセスの ID。 |
列見出しを右クリックし、目的の列を選択することで、ビューに列を追加できます。 (選択範囲をクリアして列を削除します。列を左または右にドラッグして並べ替えることもできます。 列のショートカット メニューを次の図に示します。
タスクの並べ替え
列の条件でタスクを並べ替えるには、列ヘッダーをクリックします。 たとえば、 ID 列ヘッダーをクリックすると、タスク ID (1、2、3、4、5 など) でタスクを並べ替えることができます。 並べ替え順序を逆にするには、列ヘッダーをもう一度クリックします。 現在の並べ替え列と並べ替え順序は、列の矢印で示されます。
タスクのグループ化
リスト ビューの任意の列に基づいてタスクをグループ化できます。 たとえば、Status 列ヘッダーを右クリックし、[グループ化>[状態]] をクリックすると、同じ状態のすべてのタスクをグループ化できます。 たとえば、タスクがブロックされている理由に集中できるように、待機中のタスクをすばやく確認できます。 また、デバッグ セッション中に関心がないグループを折りたたむこともできます。 同様に、他の列でグループ化することもできます。 グループ ヘッダーの横にあるボタンをクリックするだけで、グループにフラグを設定 (未設定) できます。 次の図は、グループ化モードの [タスク] ウィンドウを示しています。
親子ビュー
(このビューはマネージド コードでのみ使用できます)。 Status 列ヘッダーを右クリックし、[ グループ化>親] をクリックすると、タスクの一覧を階層ビューに変更できます。階層ビューでは、すべての子タスクが親の下に表示または非表示にできるサブノードになります。
タスクのフラグ付け
タスクリスト項目を選択し、コンテキスト メニューから [ 割り当てられたスレッドにフラグを付ける ] を選択するか、最初の列のフラグ アイコンをクリックして、タスクが実行されているタスクにフラグを設定できます。 複数のタスクにフラグを設定する場合は、フラグ列を並べ替えて、フラグが設定されたすべてのタスクを一番上に表示して、それらに集中することができます。 [ 並列スタック] ウィンドウを使用して、フラグ付きタスクのみを表示することもできます。 これにより、デバッグに関心のないタスクを除外できます。 デバッグ セッション間ではフラグは保持されません。
凍結と解凍のタスク
タスクのリスト アイテムを右クリックし、[ 割り当てられたスレッドの固定] をクリックすると、タスクが実行されているスレッドを固定できます。 (タスクが既に固定されている場合、コマンドは [割り当てられたスレッドの凍結解除] です)。スレッドを固定すると、現在のブレークポイントの後にコードをステップ実行しても、そのスレッドは実行されません。 [ すべてのスレッドを固定しますが、この 1 つ ] コマンドは、タスク リスト アイテムを実行しているスレッドを除くすべてのスレッドを固定します。
次の図は、各タスクの他のメニュー項目を示しています。
アクティブなタスクまたはフレームの切り替え
[タスクに切り替え] コマンドを使用すると、現在のタスクがアクティブなタスクになります。 [フレームに切り替え]コマンドを使用すると、選択したスタック フレームがアクティブなスタック フレームになります。 デバッガー コンテキストは、現在のタスクまたは選択したスタック フレームに切り替わります。