Wystąpił problem z wyłapaniem mojego wyjątku z Task.Run Zmieniłem kod i rozwiązano mój problem. Jestem gotów dowiedzieć się, jaka jest różnica między obsługą wyjątków w Task.Run na te dwa sposoby:Jak obsługiwać wyjątek Task.Run
W funkcji zewnętrznej nie mogę złapać wyjątku, ale w środku mogę go złapać.
void Outside()
{
try
{
Task.Run(() =>
{
int z = 0;
int x = 1/z;
});
}
catch (Exception exception)
{
MessageBox.Show("Outside : " + exception.Message);
}
}
void Inside()
{
Task.Run(() =>
{
try
{
int z = 0;
int x = 1/z;
}
catch (Exception exception)
{
MessageBox.Show("Inside : "+exception.Message);
}
});
}
EDIT (Duplikat Wyjaśnienie):
Nie chciałem mój Wewnątrz i na zewnątrz Funkcje być asynchroniczny ponieważ nazywając await Task.Run(...)
potrzebuje funkcję uchwytu być asynchroniczny.
Zobacz [Obsługa wyjątków (biblioteka zadań równoległych)] (https://msdn.microsoft.com/en-us/library/dd997415%28v=vs.110%29.aspx) –
To nie jest duplikat, jeśli PO nie używa 'await' ... A jeśli używa .net 4.x, nie może użyć' czekania'. –
@MatthewWatson Jesteś pewien? 'await' to .NET 4.x! –