c# - come risolvere "'System.AggregateException' si è verificato in mscorlib.dll"




.net (3)

Come dice il messaggio, hai un compito che ha generato un'eccezione non gestita.

Attiva Interruzione su tutte le eccezioni (Debug, Eccezioni) e riesegui il programma.
Questo ti mostrerà l'eccezione originale quando è stata lanciata in primo luogo.

(commento aggiunto): in VS2015 (o sopra). Seleziona Debug> Opzioni> Debug> Generale e deseleziona l'opzione "Abilita solo il mio codice".

Ricevo questo problema nel debugger e il programma si ferma nell'esecuzione. Il debugger non mi mostra la riga, quindi non so cosa aggiustare.

Si è verificata un'eccezione non gestita di tipo "System.AggregateException" in mscorlib.dll

Informazioni aggiuntive: Non è stata osservata un'eccezione di un'attività in Attesa sull'attività o accesso alla relativa proprietà di eccezione. Di conseguenza, l'eccezione non osservata è stata rimandata dal thread del finalizzatore.

Non è possibile ottenere il valore locale o argomento "" poiché non è disponibile in questo puntatore di istruzioni, probabilmente perché è stato ottimizzato. System.Threading.Tasks.TaskExceptionHolder

Come risolvere il mio problema?

Ho anche trovato questa domanda che è abbastanza simile Non è possibile ottenere il valore di locale o argomento in quanto non è disponibile in questo puntatore di istruzioni, probabilmente perché è stato ottimizzato via


La risposta accettata funzionerà se è possibile riprodurre facilmente il problema. Tuttavia, come best practice, dovresti rilevare eventuali eccezioni (e log) eseguite all'interno di un'attività. In caso contrario, l'applicazione si arresterà in modo anomalo se si verifica qualcosa di inaspettato all'interno dell'attività.

Task.Factory.StartNew(x=>
   throw new Exception("I didn't account for this");
)

Tuttavia, se lo facciamo, almeno l'applicazione non si blocca.

Task.Factory.StartNew(x=>
   try {
      throw new Exception("I didn't account for this");
   }
   catch(Exception ex) {
      //Log ex
   }
)

È possibile gestire direttamente l'eccezione in modo tale da non danneggiare il programma in modo anomalo (rilevando AggregateException ). Puoi anche guardare l'eccezione interna, questo ti darà una spiegazione più dettagliata di cosa è andato storto:

try {
    // your code 
} catch (AggregateException e) {

}






aggregateexception