Condividi tramite


Uso della finestra Attività (C#, Visual Basic)

La finestra Attività è simile alla finestra Thread , ad eccezione del fatto che mostra informazioni sulle attività asincrone create usando il modello asincrono/await, detto anche modello asincrono basato su attività (TAP) anziché informazioni basate su thread. Come i thread, le attività rappresentano operazioni asincrone che possono essere eseguite contemporaneamente; tuttavia, più attività possono essere eseguite nello stesso thread.

Nel codice .NET è possibile usare la finestra Attività quando si usano le app usando il modello async/await (Await e Async in VisualBasic). Tuttavia, la visualizzazione Attività nella finestra Stack paralleli è spesso più utile per il debug di applicazioni asincrone. Per altre informazioni, vedere Eseguire il debug di un'applicazione asincrona.

Nel codice .NET è possibile usare la finestra Attività quando si usano le app usando il modello async/await (Await e Async in VisualBasic). Tuttavia, la visualizzazione Attività nella finestra Stack paralleli è spesso più utile per il debug di applicazioni asincrone. Per altre informazioni, consultare Visualizzare thread e attività nella finestra Stack in parallelo.

Suggerimento

Per il codice C/C++, usare la visualizzazione Thread nella finestra Stack paralleli quando è necessario eseguire il debug di gruppi di attività, algoritmi paralleli, agenti asincroni e attività leggere. Per altre informazioni, consultare Visualizzare thread e attività nella finestra Stack in parallelo.

È possibile usare la finestra Attività ogni volta che interrompi l'esecuzione nel debugger. È possibile accedervi dal menu Debug facendo clic su Windows e quindi su Attività. La figura seguente mostra la finestra Attività nella modalità predefinita.

Finestra Attività

Finestra Attività

Annotazioni

Nel codice gestito, un oggetto Task con stato TaskStatus.Created, TaskStatus.WaitingForActivation o TaskStatus.WaitingToRun potrebbe non essere visualizzato nella finestra Attività quando i thread gestiti sono in stato di sospensione o join.

Informazioni sulla colonna delle attività

Le colonne nella finestra Attività mostrano le informazioni seguenti.

Nome della colonna Descrizione
Bandiere Mostra le attività contrassegnate e consente di contrassegnare o rimuovere il flag di un'attività.
icone Freccia gialla Una freccia gialla indica l'attività corrente. L'attività corrente è la principale attività nel thread corrente.

Freccia verde Una freccia verde indica il contesto del debugger corrente (dopo un passaggio all'attività nel debugger).

Freccia bianca Una freccia bianca indica l'attività di interruzione, ovvero quella corrente quando è stato richiamato il debugger.

Icona Pausa L'icona di pausa indica un'attività sospesa dall'utente. È possibile bloccare e sbloccare un'attività facendo clic con il pulsante destro del mouse nell'elenco.
ID Numero fornito dal sistema per l'attività. Nel codice nativo si tratta dell'indirizzo dell'attività.
Stato Stato corrente (pianificato, attivo, bloccato, deadlock, in attesa o completato) dell'attività.

Stato programmato Programmato. Un'attività pianificata è una che non è ancora stata eseguita e, pertanto, non ha ancora uno stack di chiamate, un thread assegnato o informazioni correlate.

Stato attivo Attivo. Un'attività attiva è quella che stava eseguendo codice prima di essere interrotta dal debugger.

Stato bloccato Bloccato. Un'attività bloccata è un'attività bloccata perché è in attesa di un evento da segnalare, un blocco da rilasciare o un'altra attività da completare.

Stato in attesa In attesa. Un'attività non bloccante in attesa che utilizza il pattern async/await.

Stato bloccato Bloccato. Il simbolo di deadlock fa riferimento a un'attività in attesa il cui thread associato è deadlock con un altro thread.

Passare il puntatore del mouse sulla cella Stato per visualizzare altre informazioni sul blocco. Avvertimento: La finestra Attività segnala il deadlock solo per un'attività bloccata che usa una primitiva di sincronizzazione supportata dall'attraversamento della catena di attesa (WCT). Ad esempio, per un oggetto in stato di deadlock Task, che usa WCT, il debugger segnala Awaiting-deadlocked. Per un'attività in stallo gestita dal Runtime di Concorrenza, che non usa WCT, il debugger segnala In attesa. Per altre informazioni su WCT, vedere Attraversamento catena di attesa.
Ora di inizio Ora in cui l'attività è diventata attiva.
Durata Numero di secondi in cui l'attività è stata attiva.
Tempo di completamento Ora in cui l'attività è stata completata.
Ubicazione Posizione corrente nello stack di chiamate dell'attività. Passare il puntatore del mouse sopra questa cella per visualizzare l'intero stack di chiamate per l'attività. Le attività pianificate non hanno un valore in questa colonna.
Attività Il metodo iniziale e gli argomenti passati all'attività quando è stata creata.
AsyncState Per il codice gestito, lo stato dell'attività. Per impostazione predefinita, questa colonna è nascosta. Per visualizzare questa colonna, aprire il menu di scelta rapida per una delle colonne. Scegliere Colonne, AsyncState.
Genitore L'ID dell'attività che ha generato questa attività. Se è vuoto, l'attività non ha un genitore. Questo è applicabile solo per i programmi gestiti.
Assegnazione Thread ID e nome del thread in cui è in esecuzione l'attività.
AppDomain Per il codice gestito, il dominio dell'applicazione in cui viene eseguita l'attività.
task_group Per il codice nativo, l'indirizzo dell'oggetto task_group che ha pianificato l'attività. Per gli agenti asincroni e le attività leggere, questa colonna è impostata su 0.
Processo ID del processo in cui è in esecuzione l'attività.

È possibile aggiungere colonne alla vista facendo clic con il pulsante destro del mouse su un'intestazione di colonna e quindi selezionando le colonne desiderate. Rimuovere le colonne deselezionando le selezioni. È anche possibile riordinare le colonne trascinandole verso sinistra o destra. Il menu di scelta rapida della colonna è illustrato nella figura seguente.

Menu scorciatoie nella finestra Attività

Menu scorciatoie nella finestra Attività

Ordinamento delle attività

Per ordinare le attività in base ai criteri di colonna, fare clic sull'intestazione della 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 di ordinamento, cliccare di nuovo sull'intestazione della colonna. La colonna di ordinamento attuale e il relativo ordine sono indicati da una freccia sulla colonna.

Attività di raggruppamento

È possibile raggruppare le attività in base a 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. Ad esempio, è possibile visualizzare rapidamente le attività in attesa in modo che sia possibile concentrarsi sul motivo per cui sono bloccate. È anche possibile comprimere un gruppo che non è interessante durante la sessione di debug. Allo stesso modo, è possibile raggruppare in base alle altre colonne. Un gruppo può essere contrassegnato o non contrassegnato semplicemente cliccando sul pulsante accanto all'intestazione del gruppo. La figura seguente mostra la finestra Attività in modalità raggruppata.

Modalità raggruppata nella finestra delle attività

Modalità raggruppata nella finestra delle attività

Visualizzazione padre figlio

Questa visualizzazione è disponibile solo per il codice gestito. Facendo clic con il pulsante destro del mouse sull'intestazione di colonna Stato e quindi scegliendo Gruppo per>padre, è possibile modificare l'elenco delle attività in una visualizzazione gerarchica, in cui ogni attività figlio è un sottonodo che può essere visualizzato o nascosto sotto il relativo elemento padre.

Segnalazione delle attività

È possibile contrassegnare il thread dell'attività su cui è in esecuzione un'attività selezionando l'elemento dell'elenco attività e quindi scegliendo Contrassegno thread assegnato dal menu di scelta rapida oppure facendo clic sull'icona del flag nella prima colonna. Se si contrassegnano più attività, è quindi possibile ordinare sulla colonna flag per portare tutte le attività contrassegnate all'inizio in modo che sia possibile concentrarsi solo su di essi. È anche possibile usare la finestra Stack paralleli per visualizzare solo le attività contrassegnate. In questo modo è possibile filtrare le attività a cui non si è interessati per il debug. I flag non vengono mantenuti tra le sessioni di debug.

Attività di congelamento e scongelamento

È possibile bloccare il thread in cui è in esecuzione un'attività facendo clic con il pulsante destro del mouse sull'elemento dell'elenco attività e quindi scegliendo Blocca thread assegnato. Se un'attività è già bloccata, il comando è Thaw Assigned Thread.) Quando si blocca un thread, tale thread non verrà eseguito quando si esegue il codice dopo il punto di interruzione corrente. Il comando Blocca tutti i thread, ma questo comando blocca tutti i thread tranne quello che esegue l'elemento dell'elenco attività.

La figura seguente mostra le altre voci di menu per ogni attività.

Menu thread di scelta rapida nella finestra Attività

Menu thread di scelta rapida nella finestra Attività

Cambio dell'attività o del frame attivo

Il comando Passa all'attività rende l'attività corrente l'attività attiva. Il comando Passa al frame rende il frame dello stack selezionato il frame dello stack attivo. Il contesto del debugger passa all'attività corrente o allo stack frame selezionato.