Ho studiato this article on MSDN e alcune domande/risposte su SO relative a questo argomento, ma non riesco a capire perché il codice sottostante non funzioni (in un'app console di esempio).Come gestire le eccezioni in Attività con debugger?
AggregateException dovrebbe essere generata, in base a MSDN, che conterrà un'eccezione interna con il messaggio hello
. Invece, questa eccezione hello
non è gestita. Succede quando si trova all'interno di un debugger.
Se si preme Continua o Esegui standalone, funziona come previsto. C'è un modo per evitare di continuare a premere per tutto il tempo in VS? Dopo tutto, qualunque cosa si trovi all'interno di un blocco Try...Catch
viene considerato gestito in un modello di programmazione a thread singolo. In caso contrario, il debug potrebbe essere un incubo.
VB.NET
Sub Main()
Try
Task.Factory.StartNew(AddressOf TaskThatThrowsException).Wait()
Catch ex As AggregateException
Console.WriteLine(ex.ToString) 'does not get here until you hit Continue
End Try
End Sub
Private Sub TaskThatThrowsException()
Throw New Exception("hello") 'exception was unhandled
End Sub
C#
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
try {
Task.Factory.StartNew(TaskThatThrowsException).Wait();
}
catch (AggregateException ex) {
Console.WriteLine(ex.ToString()); //never gets here
}
}
static void TaskThatThrowsException() {
throw new Exception("hello"); //exception was unhandled
}
}
}
C'è qualcosa di ovvio che mi manca qui?
Impostare il debugger di fermare su tutte le eccezioni. Dove si ferma? Dovrebbe fermarsi in "TaskThatThrowsException" e in "Wait". – usr
@usr: anche ora si ferma alla riga 'Lancia nuova eccezione (" ciao "), controllando tutto Gettato non lo rende migliore. Vorrei che non si fermasse a questo, e piuttosto processare Console.WriteLine. In caso contrario, il debug potrebbe essere un incubo. – Neolisk
Le eccezioni delle attività non vengono visualizzate in StartNew, solo in .Wait(). Dim myTask = Task.Factory.StartNew (...) Prova MyTask.Wait() Catch ... – adrianm