共用方式為


使用 [工作] 視窗 (C#、Visual Basic、C++)

[工作] 視窗類似於 [線程] 視窗,不同之處在於它會顯示或System.Threading.Tasks.Task對象的相關信息,而不是每個線程。 如同線程,工作代表可以同時執行的異步作;不過,多個工作可能會在相同的線程上執行。

在 Managed 程式代碼中,您可以使用 [工作] 視窗來處理System.Threading.Tasks.Task物件,或使用 awaitasync 關鍵詞(在 VisualBasic 中為 AwaitAsync)。 如需有關受控程式碼中任務的詳細資訊,請參閱 平行程式設計

在本機代碼中,當您使用工作群組平行算法異步代理程式輕量型任務時,可以使用任務視窗。 如需原生程式代碼中工作的詳細資訊,請參閱 並行運行時間

只要進入調試程式,您就可以使用 [ 工作 ] 視窗。 您可以在 [偵錯] 功能表中單擊 [Windows],然後再單擊 [工作] 來存取它。 下圖顯示預設模式中的 [ 工作 ] 視窗。

工作視窗

工作視窗

備註

在 Managed 程式代碼中,當 Managed 線程處於睡眠或聯結狀態時,狀態為 TaskTaskStatus.WaitingForActivationTaskStatus.WaitingToRun 可能不會顯示在 工作 視窗中。

任務欄位資訊

工作 視窗中的欄位顯示以下資訊。

欄位名稱 說明
旗標 顯示哪些工作已加上旗標,並可讓您標記或取消標記工作。
圖示 黃色箭號 黃色箭號表示目前的工作。 目前的工作是目前線程上最上層的工作。

綠色箭號 綠色箭號表示目前的調試程序內容(在調試程式中切換至工作之後)。

白色箭號 白色箭號表示中斷工作,也就是叫用調試程式時目前的工作。

暫停圖示 暫停圖示表示使用者已凍結的工作。 您可以在清單中按下滑鼠右鍵來凍結和解除凍結工作。
識別碼 系統提供的任務號碼。 在原生程式碼中,這是任務的位址。
狀態 工作的目前狀態(已排程、作用中、已封鎖、死結、等候或已完成)。

已排程的狀態 已排程。 排程工作是尚未執行的工作,因此,還沒有呼叫堆棧、指派的線程或相關信息。

狀態作用中 啟動中。 活動中的任務是在除錯程序暫停前執行程式碼的任務。

狀態已封鎖 封鎖。 阻塞的任務是因為它正在等待事件的訊號、鎖定解除或另一個任務完成。

等待狀態 等待。 使用 async/await 模式的非封鎖、等候工作。

狀態死結 死結。 死結工作指的是等候的工作,其執行緒與另一個執行緒互相造成死結。

將滑鼠停留在死結或等候工作的 Status 單元格上,以查看區塊的詳細資訊。 警告: [ 工作 ] 視窗只會針對使用等候鏈結周游 (WCT) 支援的同步處理基本類型工作的封鎖工作報告死結。 例如,對於使用 WCT 的死鎖 Task 物件,偵錯工具會報告 Awaiting-deadlocked。 針對由並行執行階段管理且不使用 WCT 的死結工作,調試程式會回報 Waiting。 如需 WCT 的詳細資訊,請參閱 等待鏈巡覽
開始時間 任務開始運行的時間。
期間 工作已啟動的秒數。
完成時間 工作完成的時間。
地點 工作呼叫堆疊中的目前位置。 將滑鼠暫留在此儲存格上,以查看任務的整個呼叫堆疊。 排程任務在此欄位中沒有值。
任務 最初的方法以及在建立工作時傳遞給工作任務的任何參數。
AsyncState 對於受管理的程式碼,任務狀態。 根據預設,此數據行會隱藏。 若要顯示此欄,請開啟其中一個欄位標題的快顯功能表。 選擇 ColumnsAsyncState
父母 創建此任務的任務ID。 如果這是空白的,則工作沒有父代。 這只適用於受控程式。
線程指派 工作執行所在的線程標識碼和名稱。
AppDomain 針對受管理的程式碼,工作執行所在的應用程式執行空間。
task_group 針對原生程式碼,「task_group 對象」的位址用於排程工作。 對於異步代理程式和輕量型工作,此數據行會設定為 0。
過程 工作執行之進程的識別碼。

您可以用滑鼠右鍵按下數據行標題,然後選取您想要的數據行,以將數據行新增至檢視。 (清除選取範圍以移除資料行。您也可以將資料行拖曳到左或向右來重新排列資料行。 下圖顯示欄的快捷選單。

任務視窗中的快速鍵檢視選單

任務視窗中的快速鍵檢視選單

排序工作

若要依欄準則排序工作,請單擊欄標題。 例如,點擊 ID 資料行標頭,您可以依任務 ID 排序任務:1,2,3,4,5 等等。 若要反轉排序順序,請再次點選欄標題。 目前排序數據行和排序順序會以數據行上的箭號表示。

分類工作

您可以根據清單檢視中的任何資料列來分組工作。 例如,以滑鼠按一下右鍵 [狀態] 資料行標頭,然後按一下 [群組依據>[狀態]],即可將具有相同狀態的所有任務分組。 例如,您可以快速查看待處理任務,以便專注於了解任務被阻塞的原因。 您也可以折疊在偵錯會話期間不感興趣的群組。 同樣地,您可以依據其他欄位進行分組。 只需點擊群組標頭旁的按鈕,即可將群組標示或取消標示。 下圖顯示群組模式中的 [ 工作 ] 視窗。

[工作] 視窗中的群組模式

[工作] 視窗中的群組模式

父子檢視

(此檢視僅適用於受管理的程式碼。)在 狀態 欄位標題上右鍵點擊後,再點選 >父項分組,您可以將工作清單變更為階層式檢視,其中每個子工作都是子節點,可在其父節點下顯示或隱藏。

標記工作

您可以選擇工作清單項目,然後從功能表中選擇旗標指派的執行緒,或按一下第一欄的旗標圖示,來標示工作所執行的執行緒。 如果您為多個任務加上旗標,接著您可以在旗標欄位上排序,將所有已標幟的任務放到頂端,以便您可以專心在這些任務上。 您也可以使用平行堆棧 視窗來僅檢視已標記的工作。 這可讓您篩選掉您不想要偵錯的工作。 偵錯會話之間不會保存旗標。

凍結和解凍工作

您可以用滑鼠右鍵按下工作清單專案,然後點擊 凍結指派的線程 來凍結工作執行所在的線程。 (如果工作已經凍結,則命令為 [解除凍結指派的線程]。當您凍結線程時,當您在目前的斷點之後逐步執行程式碼時,該線程將不會執行。 凍結所有線程,但這個命令會凍結所有線程,但執行工作清單項目的線程除外。

下圖顯示每個工作的其他功能表項。

[工作] 視窗中的快捷方式線程功能表

[工作] 視窗中的快捷方式線程功能表

切換作用中工作或框架

切換至任務 命令會將目前的任務設為使用中任務。 [切換至框架] 命令會將選取的堆疊框架設為使用中的堆疊框架。 調試程式內容會切換至目前工作或選取的堆疊框架。