[工作] 視窗類似於 [線程] 視窗,不同之處在於它會顯示或System.Threading.Tasks.Task對象的相關信息,而不是每個線程。 如同線程,工作代表可以同時執行的異步作;不過,多個工作可能會在相同的線程上執行。
在 Managed 程式代碼中,您可以使用 [工作] 視窗來處理System.Threading.Tasks.Task物件,或使用 await 和 async 關鍵詞(在 VisualBasic 中為 Await 和 Async)。 如需有關受控程式碼中任務的詳細資訊,請參閱 平行程式設計。
在本機代碼中,當您使用工作群組、平行算法、異步代理程式和輕量型任務時,可以使用任務視窗。 如需原生程式代碼中工作的詳細資訊,請參閱 並行運行時間。
只要進入調試程式,您就可以使用 [ 工作 ] 視窗。 您可以在 [偵錯] 功能表中單擊 [Windows],然後再單擊 [工作] 來存取它。 下圖顯示預設模式中的 [ 工作 ] 視窗。
備註
在 Managed 程式代碼中,當 Managed 線程處於睡眠或聯結狀態時,狀態為 Task、TaskStatus.WaitingForActivation 或 TaskStatus.WaitingToRun 的 可能不會顯示在 工作 視窗中。
任務欄位資訊
工作 視窗中的欄位顯示以下資訊。
欄位名稱 | 說明 |
---|---|
旗標 | 顯示哪些工作已加上旗標,並可讓您標記或取消標記工作。 |
圖示 |
![]() ![]() ![]() ![]() |
識別碼 | 系統提供的任務號碼。 在原生程式碼中,這是任務的位址。 |
狀態 | 工作的目前狀態(已排程、作用中、已封鎖、死結、等候或已完成)。 ![]() ![]() ![]() ![]() ![]() 將滑鼠停留在死結或等候工作的 Status 單元格上,以查看區塊的詳細資訊。 警告: [ 工作 ] 視窗只會針對使用等候鏈結周游 (WCT) 支援的同步處理基本類型工作的封鎖工作報告死結。 例如,對於使用 WCT 的死鎖 Task 物件,偵錯工具會報告 Awaiting-deadlocked。 針對由並行執行階段管理且不使用 WCT 的死結工作,調試程式會回報 Waiting。 如需 WCT 的詳細資訊,請參閱 等待鏈巡覽。 |
開始時間 | 任務開始運行的時間。 |
期間 | 工作已啟動的秒數。 |
完成時間 | 工作完成的時間。 |
地點 | 工作呼叫堆疊中的目前位置。 將滑鼠暫留在此儲存格上,以查看任務的整個呼叫堆疊。 排程任務在此欄位中沒有值。 |
任務 | 最初的方法以及在建立工作時傳遞給工作任務的任何參數。 |
AsyncState | 對於受管理的程式碼,任務狀態。 根據預設,此數據行會隱藏。 若要顯示此欄,請開啟其中一個欄位標題的快顯功能表。 選擇 Columns、AsyncState。 |
父母 | 創建此任務的任務ID。 如果這是空白的,則工作沒有父代。 這只適用於受控程式。 |
線程指派 | 工作執行所在的線程標識碼和名稱。 |
AppDomain | 針對受管理的程式碼,工作執行所在的應用程式執行空間。 |
task_group | 針對原生程式碼,「task_group 對象」的位址用於排程工作。 對於異步代理程式和輕量型工作,此數據行會設定為 0。 |
過程 | 工作執行之進程的識別碼。 |
您可以用滑鼠右鍵按下數據行標題,然後選取您想要的數據行,以將數據行新增至檢視。 (清除選取範圍以移除資料行。您也可以將資料行拖曳到左或向右來重新排列資料行。 下圖顯示欄的快捷選單。
排序工作
若要依欄準則排序工作,請單擊欄標題。 例如,點擊 ID 資料行標頭,您可以依任務 ID 排序任務:1,2,3,4,5 等等。 若要反轉排序順序,請再次點選欄標題。 目前排序數據行和排序順序會以數據行上的箭號表示。
分類工作
您可以根據清單檢視中的任何資料列來分組工作。 例如,以滑鼠按一下右鍵 [狀態] 資料行標頭,然後按一下 [群組依據>[狀態]],即可將具有相同狀態的所有任務分組。 例如,您可以快速查看待處理任務,以便專注於了解任務被阻塞的原因。 您也可以折疊在偵錯會話期間不感興趣的群組。 同樣地,您可以依據其他欄位進行分組。 只需點擊群組標頭旁的按鈕,即可將群組標示或取消標示。 下圖顯示群組模式中的 [ 工作 ] 視窗。
父子檢視
(此檢視僅適用於受管理的程式碼。)在 狀態 欄位標題上右鍵點擊後,再點選 依>父項分組,您可以將工作清單變更為階層式檢視,其中每個子工作都是子節點,可在其父節點下顯示或隱藏。
標記工作
您可以選擇工作清單項目,然後從功能表中選擇旗標指派的執行緒,或按一下第一欄的旗標圖示,來標示工作所執行的執行緒。 如果您為多個任務加上旗標,接著您可以在旗標欄位上排序,將所有已標幟的任務放到頂端,以便您可以專心在這些任務上。 您也可以使用平行堆棧 視窗來僅檢視已標記的工作。 這可讓您篩選掉您不想要偵錯的工作。 偵錯會話之間不會保存旗標。
凍結和解凍工作
您可以用滑鼠右鍵按下工作清單專案,然後點擊 凍結指派的線程 來凍結工作執行所在的線程。 (如果工作已經凍結,則命令為 [解除凍結指派的線程]。當您凍結線程時,當您在目前的斷點之後逐步執行程式碼時,該線程將不會執行。 凍結所有線程,但這個命令會凍結所有線程,但執行工作清單項目的線程除外。
下圖顯示每個工作的其他功能表項。
切換作用中工作或框架
切換至任務 命令會將目前的任務設為使用中任務。 [切換至框架] 命令會將選取的堆疊框架設為使用中的堆疊框架。 調試程式內容會切換至目前工作或選取的堆疊框架。