W poprzednich wersjach MonoTouch, kiedyś to zrobić, aby ignorować niepostrzeżenie wyjątki:Jak zignorować nieobsługiwane wyjątki przy pomocy async/await w MonoTouch?
TaskScheduler.UnobservedTaskException += delegate(object sender, UnobservedTaskExceptionEventArgs e) {
Console.WriteLine (e);
e.SetObserved();
};
czy jest to dobra praktyka jest dyskusyjna, ale chciałbym wiedzieć, aby osiągnąć ten sam efekt z async
/await
słów kluczowych now officially supported in Xamarin.iOS 6.4.
Oto kod używam do testowania:
async void OnClick (object sender, EventArgs e)
{
await Task.Run (() => { throw new Exception(); });
}
Kiedy go uruchomić, debugger wstrzymuje w AsyncVoidMethodBuilder
:
Czytałem, że .NET 4.5 podobno changed the behaviour so unobserved exceptions don't crash the app -ale to nie pomaga, jeśli wyjątki są publikowane w kontekście synchronizacji UIKit, gdzie nie mogę ich obsłużyć.
Czy istnieje sposób, aby zignorować niezobowiązujące wyjątki od await
w MonoTouch?
Wspominasz o tym, że "zatrzymuje się" w 'AsyncVoidMethodBuilder'. Czy to oznacza, że jeśli uderzysz dalej, wyjątek zostanie ostatecznie połknięty przez twojego przewodnika? Czy jest to przypadek, w którym tylko debuger zatrzymuje się na tym wyjątku? Poza tym artykuł, do którego się odwołujesz, zawiera niektóre ustawienia app.config, dzięki którym wyjątek działa jak .NET 4. Czy byłoby to pomocne? –
@Brad: Jeśli kliknę przycisk Dalej, proces się zawiesi, ponieważ wyjątek zostanie ponownie zgłoszony w wątku interfejsu użytkownika przez podstawowy "UIKitSynchronizationContext". Ustawienia konfiguracyjne mają na celu zachowanie * bardziej rygorystyczne *, więc nie powinny być pomocne. Podniosłeś jednak ważny punkt; w poprzednich wersjach udało mi się wychwycić wyjątki w programie Unobserved handler, pomimo tego, że został zgłoszony w wątku interfejsu użytkownika. –
Dostępne są różne Nieobserwowalne procedury obsługi dla zadań, AppDomain itp. Spróbuj użyć interfejsu specyficznego dla interfejsu użytkownika. Oczekuję ponownego wyrzucenia wyjątków w SynchronizationContext –