Condividi tramite


Utilizzo della finestra Attività in parallelo

La finestra Attività in parallelo assomiglia alla finestra Thread, con la differenza che visualizza informazioni su ogni oggetto System.Threading.Tasks.Task o task_handle anziché su ogni thread.Analogamente ai thread, le attività rappresentano operazioni asincrone eseguibili simultaneamente; tuttavia, più attività possono essere eseguite nello stesso thread.

Nel codice gestito, è possibile utilizzare la finestra Attività in parallelo quando si utilizzano oggetti System.Threading.Tasks.Task.Per ulteriori informazioni sulle attività nel codice gestito, vedere Programmazione parallela in .NET Framework.

Nel codice nativo, è possibile utilizzare la finestra Attività in parallelo quando si utilizzano gruppi di attività, algoritmi paralleli, agenti asincroni e attività leggere.Per ulteriori informazioni sulle attività nel codice nativo, vedere Runtime di concorrenza.

La finestra Attività in parallelo può essere utilizzata ogni qualvolta si interrompe il debugger.Per accedere alla finestra, scegliere Finestre dal menu Debug, quindi fare clic su Attività in parallelo.Nell'illustrazione seguente viene mostrata la finestra Attività in parallelo nella modalità predefinita.

Finestra Attività in parallelo

[!NOTA]

In il codice gestito, Task con lo stato di Created, WaitingForActivation, o WaitingToRun non vengano visualizzati nella finestra attività in parallelo quando i thread gestiti sono in un thread o fanno parte dello stato.

Informazioni nelle colonne della finestra Attività in parallelo

Nelle colonne della finestra Attività in parallelo vengono visualizzate le seguenti informazioni.

Nome colonna

Descrizione

Flag

Mostra quali attività sono contrassegnate e consente di impostare o rimuovere un flag per un'attività.

Icone

Una freccia gialla indica l'attività corrente.L'attività corrente è l'attività in primo piano nel thread corrente.

Una freccia bianca indica l'attività di interruzione, vale a dire l'attività corrente al momento della chiamata del debugger.

L'icona di sospensione indica un'attività bloccata dall'utente.È possibile bloccare e sbloccare un'attività facendovi clic sopra con il pulsante destro del mouse nell'elenco.

ID

Numero fornito dal sistema per l'attività.Nel codice nativo, è l'indirizzo dell'attività.

Stato

Stato corrente dell'attività (pianificata, in esecuzione, in deadlock o in attesa).Un'attività pianificata è un'attività che non è stata ancora eseguita, pertanto non dispone ancora di uno stack di chiamate, un thread assegnato o informazioni correlate.

Un'attività in esecuzione è un'attività che stava eseguendo codice prima del passaggio al debugger.

Un'attività in attesa è un'attività bloccata in quanto sta attendendo la segnalazione di un evento, il rilascio di un blocco o la conclusione di un'altra attività.

Un'attività in deadlock è un'attività in attesa il cui thread è in deadlock con un altro thread.

Passare il mouse sulla cella Stato di un'attività in deadlock o in attesa per visualizzare ulteriori informazioni sul blocco.

Nota di avvisoAttenzione
La finestra Attività in parallelo segnala un deadlock solo per un'attività bloccata che utilizza una primitiva di sincronizzazione supportata da Wait Chain Traversal (WCT).Ad esempio, per un oggetto Task in deadlock, che utilizza WCT, viene visualizzato il messaggio In attesa-In deadlock.Per un'attività in deadlock gestita dal runtime di concorrenza, che non utilizza WCT, viene visualizzato il messaggio In attesa.Per ulteriori informazioni su WCT, vedere Wait Chain Traversal.

Location

Percorso corrente nello stack di chiamate dell'attività.Passare il mouse su questa cella per visualizzare l'intero stack di chiamate dell'attività.Le attività pianificate non presentano alcun valore in questa colonna.

Task

Metodo iniziale ed eventuali argomenti passati all'attività quando è stata creata.

Padre

ID dell'attività che ha creato questa attività.Se la cella è vuota significa che l'attività non dispone di un'attività padre.Questo dato è applicabile ai soli programmi gestiti.

Assegnazione thread

ID e nome del thread nel quale viene eseguita l'attività.

AppDomain

Dominio applicazione nel quale viene eseguita l'attività, in caso di codice gestito.

task_group

Indirizzo dell'oggetto task_group che ha pianificato l'attività, in caso di codice nativo.Per gli agenti asincroni e le attività leggere, questa colonna viene impostata su 0.

Processo

ID del processo che l'attività è in esecuzione.

stato di Async

Per il codice gestito, lo stato dell' attività.Per impostazione predefinita, questa colonna viene nascosta.Per visualizzare questa colonna, aprire il menu di scelta rapida per una delle intestazioni di colonna.scegliere Colonne, AsyncState.

Per aggiungere colonne alla visualizzazione, fare clic con il pulsante destro del mouse su un'intestazione di colonna e selezionare le colonne desiderate.Per rimuovere le colonne, annullare le selezioni. È possibile inoltre riordinare le colonne trascinandole a sinistra o a destra.Nell'illustrazione seguente viene mostrato il menu di scelta rapida delle colonne.

Menu di scelta rapida Attività in parallelo

Ordinamento delle attività

Per ordinare le attività in base ai criteri delle colonne, fare clic sull'intestazione di colonna.Ad esempio, facendo clic sull'intestazione di colonna ID è possibile ordinare le attività in base all'ID attività: 1, 2, 3, 4, 5 e così via.Per invertire l'ordine, fare nuovamente clic sull'intestazione.La colonna di ordinamento e l'ordinamento correnti sono indicati da una freccia nella colonna.

Raggruppamento delle attività

È possibile raggruppare le attività in base a una qualsiasi colonna nella visualizzazione elenco.Ad esempio, facendo clic con il pulsante destro del mouse sull'intestazione di colonna Stato e scegliendo Raggruppa per stato, è possibile raggruppare tutte le attività con lo stesso stato.Tale operazione può risultare utile, ad esempio, per visualizzare rapidamente tutte le attività in attesa, così da concentrarsi sul motivo del blocco.È possibile inoltre comprimere un gruppo di poco interesse durante la sessione di debug.Allo stesso modo, è possibile raggruppare in base alle altre colonne.Per contrassegnare o rimuovere il contrassegno di un gruppo, è sufficiente fare clic sul pulsante accanto all'intestazione del gruppo.Nell'illustrazione seguente viene mostrata la finestra Attività in parallelo nella modalità raggruppata.

Modalità raggruppata della finestra Attività in parallelo

Visualizzazione padre/figlio

(Questa visualizzazione è disponibile solo per codice gestito). Facendo clic con il pulsante destro del mouse su un'intestazione di colonna e scegliendo Visualizzazione padre/figlio, è possibile impostare l'elenco di attività su una visualizzazione gerarchica nella quale ogni attività figlio è un nodo secondario che può essere visualizzato o nascosto nell'attività padre.Nell'illustrazione seguente vengono mostrate le attività nella visualizzazione padre/figlio.

Visualizzazione padre/figlio della finestra Attività in parallelo

Contrassegno delle attività

È possibile contrassegnare il thread l'attività su cui viene eseguita un'attività fare clic con il pulsante destro del mouse sulla voce di elenco attività e scegliere Contrassegna, oppure fare clic sull' icona del flag nella prima colonna.Se si contrassegnano diverse attività, sarà successivamente possibile ordinare in base alla colonna del contrassegno in modo da portare tutte le attività contrassegnate in cima e potersi concentrare su di esse.È inoltre possibile utilizzare la finestra Stack in parallelo per visualizzare solo le attività con contrassegno.In questo modo si possono filtrare le attività di poco interesse per il debug.I contrassegni non vengono salvati in modo permanente tra una sessione di debug e l'altra.

Blocco e sblocco delle attività

Per bloccare il thread nel quale viene eseguita un'attività, fare clic con il pulsante destro del mouse sull'elemento dell'elenco di attività e scegliere Blocca thread assegnato.Se un'attività è già bloccata, il comando è Sblocca thread assegnato. Quando si blocca un thread, questo non verrà eseguito nel momento in cui si proseguirà con l'esecuzione del codice dopo il punto di interruzione corrente.Il comando Blocca tutti i thread ad eccezione di quello corrente blocca tutti i thread eccetto quello che esegue l'elemento dell'elenco di attività.

Nell'illustrazione seguente vengono mostrate le altre voci di menu per ogni attività.

Menu di scelta rapida Attività in parallelo

Vedere anche

Attività

Procedura dettagliata: debug di un'applicazione parallela

Concetti

Runtime di concorrenza

Utilizzo della finestra Stack in parallelo

Altre risorse

Guida di orientamento al debugger

Debug del codice gestito

Programmazione parallela in .NET Framework