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

[工作] 視窗與 [執行緒] 視窗類似,差別在於前者顯示的是 System.Threading.Tasks.Tasktask_handle 物件的詳細資訊,而非每個執行緒的詳細資訊。 與執行緒一樣,工作代表可以並行執行的非同步作業,但是多項工作可能會在相同執行緒上執行。

在 Managed 程式碼中,當您使用 System.Threading.Tasks.Task 物件或使用 awaitasync 關鍵字 (在 Visual Basic 中為 AwaitAsync) 時,可以使用 [工作] 視窗。 如需 Managed 程式碼格式之工作的詳細資訊,請參閱平行程式設計

在機器碼中,您可以在操作工作群組、平行演算法、非同步代理程式及輕量型工作時使用 [工作] 視窗。 如需機器碼格式之工作的詳細資訊,請參閱並行執行階段

只要您進入偵錯工具,就可以使用 [工作] 視窗。 存取方式是按一下 [偵錯] 功能表上的 [視窗],然後按一下 [工作]。 下圖顯示處於預設模式的 [工作] 視窗。

[工作] 視窗

[工作] 視窗

注意

在受控程式碼中,當受控執行緒處於睡眠或聯結狀態時,狀態為 TaskStatus.CreatedTaskStatus.WaitingForActivationTaskStatus.WaitingToRunTask,可能不會顯示在 [工作] 視窗中。

工作資料行資訊

[工作] 視窗中的資料行會顯示下列資訊。

資料行名稱 描述
旗標 顯示已加上旗標的工作,並可讓您為工作加上或取消旗標。
圖示 黃色箭號表示目前工作。 目前工作是目前執行緒上的最上方工作。

白色箭號表示最新的工作,即叫用偵錯工具時的最新工作。

暫停圖示表示已由使用者凍結的工作。 在清單中,於工作上按一下滑鼠右鍵,就可以凍結和解除凍結工作。
識別碼 由系統提供給工作的號碼。 在機器碼中,這是工作的位址。
狀態 工作的目前狀態 (已排程、使用中、已封鎖、死結、等待中或已完成)。 已排程工作是尚未執行的工作,因此,還沒有呼叫堆疊、指派的執行緒或相關資訊。

使用中工作是在進入偵錯工具之前正在執行程式碼的工作。

等待中或已封鎖的工作是因等待事件發出信號、釋放鎖定或另一個工作完成而遭封鎖的工作。

死結工作是其執行緒與另一個執行緒產生死結的等待中工作。

將滑鼠游標停留在死結或等待中工作的 [狀態] 儲存格上方,就可以查看封鎖的詳細資訊。 警告:只有在遭到封鎖的工作是使用等待鏈結周遊 (WCT) 所支援的同步處理原始物件時,[工作] 視窗才會報告死結。 例如,對於使用 WCT 的死結 Task 物件,偵錯工具會報告 Awaiting-deadlocked。 如果發生死結的工作是由「並行執行階段」管理 (即不使用 WCT),偵錯工具會報告 [等待中]。 如需 WCT 的詳細資訊,請參閱等待鏈結周遊
開始時間 工作變成使用中的時間。
期間 工作已處於使用中狀態的秒數。
完成時間 工作已完成的時間。
Location 在工作之呼叫堆疊中的目前位置。 將滑鼠游標停留在這個儲存格上方,就可以查看整個工作的呼叫堆疊。 已排程工作的這個資料行沒有值。
Task 初始方法和任何在建立工作時未傳遞給工作的引數。
AsyncState 對於 Managed 程式碼來說,是指工作狀態。 根據預設,這個資料行是隱藏狀態。 若要顯示這個資料行,請開啟其中一個資料行標頭的內容功能表。 選擇 [資料行]、[AsyncState]
上層 建立這個工作之工作的 ID。 如果空白,表示工作沒有父代。 這只適用於 Managed 程式。
執行緒指派 正在執行工作之執行緒的 ID 和名稱。
AppDomain 針對 Managed 程式碼,是正在執行工作的應用程式定義域。
task_group 針對機器碼,是已排程工作之 task_group 物件的位址。 針對非同步代理程式和輕量型工作,此欄會設為 0。
處理 工作執行所在的處理序 ID。

在資料行標題上按一下滑鼠右鍵,然後選取想要的資料行,就可以將資料行加入至檢視 (清除選取範圍,就可以移除資料行。)您也可以將資料行向左或向右拖曳,以重新排列資料行。 下圖顯示資料行捷徑功能表。

工作視窗中的捷徑檢視功能表

工作視窗中的捷徑檢視功能表

排序工作

若要依據資料行準則排序工作,請按一下資料行標頭。 例如,按一下 [ID] 資料行標頭,就可以依據工作 ID:1,2,3,4,5 等排序工作。 若要反轉排序次序,請再按一下資料行標頭。 目前排序資料行和排序次序是透過資料行上的箭號來表示。

群組工作

您可以根據清單檢閱中的任何資料行,來群組工作。 例如,在 [狀態] 資料行標頭上按一下滑鼠右鍵,然後按一下 [分組依據]>[狀態],就可以群組所有具有相同狀態的工作。 例如,您可以快速查看等待中工作,以將焦點放在它們遭到封鎖的原因。 您也可以摺疊偵錯工作階段期間不感興趣的群組。 同樣地,您也可以依據其他資料行來進行群組。 只要按一下群組標頭旁邊的按鈕,就可以為群組加上 (取消) 旗標。 下圖顯示處於群組模式的 [工作] 視窗。

工作視窗中的群組模式

工作視窗中的群組模式

父子式檢視

(此檢視僅適用於 Managed 程式碼。)以滑鼠右鍵按一下 [狀態] 資料行標頭,然後按一下 [依父系>分組],您就可以將工作清單變更為階層式檢閱,其中,每個子工作都是可以在其父代下方顯示或隱藏的子節點。

為工作加上旗標

若您要將工作執行所在的執行緒加上旗標,選取工作清單項目,然後從操作功能表選擇 [旗標指派的執行緒],或是按一下第一個資料行中的旗標圖示,就可以加上旗標。 如果您為多項工作加上旗標,則可以依據旗標資料行進行排序,以將所有加上旗標的工作帶至頂端,讓您可以只將焦點放在這些資料行。 您也可以使用 [平行堆疊] 視窗,只檢閱加上旗標的工作。 這可讓您篩選出不想要進行偵錯的工作。 在偵錯工作階段之間不會持續保留旗標。

凍結和解除凍結工作

您可以凍結正在執行工作的執行緒,方法是在工作清單項目上按一下滑鼠右鍵,然後按一下 [凍結指派的執行緒]。 (如果工作已遭凍結,則命令是 [解除凍結指派的執行緒])。當您凍結執行緒時,就不會在逐步執行目前中斷點後面的程式碼時執行該執行緒。 [凍結這個執行緒以外的所有執行緒] 命令則會凍結所有執行緒,但不含正在執行工作清單項目的執行緒。

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

工作視窗中的捷徑對話功能表

工作視窗中的捷徑對話功能表

切換作用中工作或框架

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