[ 工作 ] 視窗類似於 [線程 ] 視窗,不同之處在於它會顯示使用 async/await 模式建立的異步工作相關信息,也稱為以 工作為基礎的異步模式 (TAP), 而不是以線程為基礎的資訊。 如同線程,工作代表可以同時執行的異步作;不過,多個工作可能會在相同的線程上執行。
在 .NET 程式代碼中,您可以使用 [ 工作 ] 視窗,當您使用 async/await 模式的應用程式時(VisualBasic 中的 Await 和 Async )。 不過,[平行堆棧] 視窗中的 [工作] 檢視通常更有助於偵錯異步應用程式。 如需詳細資訊,請參閱 偵錯異步應用程式。
在 .NET 程式代碼中,您可以使用 [ 工作 ] 視窗,當您使用 async/await 模式的應用程式時(VisualBasic 中的 Await 和 Async )。 不過,[平行堆棧] 視窗中的 [工作] 檢視通常更有助於偵錯異步應用程式。 如需詳細資訊,請參閱在平行堆疊視窗中檢視執行緒和工作。
小提示
針對 C/C++ 程式碼,當您需要偵錯工作群組、平行演算法、非同步代理程式和輕量型工作時,請使用 [平行堆疊] 視窗中的 [執行緒] 檢視。 如需詳細資訊,請參閱在平行堆疊視窗中檢視執行緒和工作。
只要進入調試程式,您就可以使用 [ 工作 ] 視窗。 您可以在 [偵錯] 功能表中單擊 [Windows],然後再單擊 [工作] 來存取它。 下圖顯示預設模式中的 [ 工作 ] 視窗。
備註
在 Managed 程式代碼中,當 Managed 線程處於睡眠或聯結狀態時,狀態為 Task、TaskStatus.WaitingForActivation 或 TaskStatus.WaitingToRun 的 可能不會顯示在 工作 視窗中。
任務欄位資訊
工作 視窗中的欄位顯示以下資訊。
| 欄位名稱 | 說明 |
|---|---|
| 旗標 | 顯示哪些工作已加上旗標,並可讓您標記或取消標記工作。 |
| 圖示 |
|
| 識別碼 | 系統提供的任務號碼。 在原生程式碼中,這是任務的位址。 |
| 狀態 | 工作的目前狀態(已排程、作用中、已封鎖、死結、等候或已完成)。 將滑鼠停留在 [狀態 ] 數據格上,以查看區塊的詳細資訊。 警告: [ 工作 ] 視窗只會針對使用等候鏈結周游 (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 等等。 若要反轉排序順序,請再次點選欄標題。 目前排序數據行和排序順序會以數據行上的箭號表示。
分類工作
您可以根據清單檢視中的任何資料列來分組工作。 例如,以滑鼠按一下右鍵 [狀態] 資料行標頭,然後按一下 [群組依據>[狀態]],即可將具有相同狀態的所有任務分組。 例如,您可以快速查看待處理任務,以便專注於了解任務被阻塞的原因。 您也可以折疊在偵錯會話期間不感興趣的群組。 同樣地,您可以依據其他欄位進行分組。 只需點擊群組標頭旁的按鈕,即可將群組標示或取消標示。 下圖顯示群組模式中的 [ 工作 ] 視窗。
父子檢視
(此檢視僅適用於受管理的程式碼。)在 狀態 欄位標題上右鍵點擊後,再點選 依>父項分組,您可以將工作清單變更為階層式檢視,其中每個子工作都是子節點,可在其父節點下顯示或隱藏。
標記工作
您可以選擇工作清單項目,然後從功能表中選擇旗標指派的執行緒,或按一下第一欄的旗標圖示,來標示工作所執行的執行緒。 如果您為多個任務加上旗標,接著您可以在旗標欄位上排序,將所有已標幟的任務放到頂端,以便您可以專心在這些任務上。 您也可以使用平行堆棧 視窗來僅檢視已標記的工作。 這可讓您篩選掉您不想要偵錯的工作。 偵錯會話之間不會保存旗標。
凍結和解凍工作
您可以用滑鼠右鍵按下工作清單專案,然後點擊 凍結指派的線程 來凍結工作執行所在的線程。 (如果工作已經凍結,則命令為 [解除凍結指派的線程]。當您凍結線程時,當您在目前的斷點之後逐步執行程式碼時,該線程將不會執行。 凍結所有線程,但這個命令會凍結所有線程,但執行工作清單項目的線程除外。
下圖顯示每個工作的其他功能表項。
切換作用中工作或框架
切換至任務 命令會將目前的任務設為使用中任務。 [切換至框架] 命令會將選取的堆疊框架設為使用中的堆疊框架。 調試程式內容會切換至目前工作或選取的堆疊框架。