Остановка HockeyApp сбой моего приложения Xamarin iOS с UnobservedTaskException

У нас есть приложение Xamarin iOS, которое расположено поверх сильно асинхронной библиотеки PCL. Существует вероятность того, что иногда задача будет виновата в библиотеке и не будет наблюдаться. Поэтому мы подключили диспетчер var = BITHockeyManager . SharedHockeyManager ; менеджер . Настроить ( APPID ); #if Менеджер DEBUG . DebugLogEnabled = true ; #endif manager . StartManager (); обработчик на TaskScheduler, чтобы гарантировать, что это не обязательно приведет к сокращению нашего приложения.

Это работало нормально, пока мы не включили HockeyApp для централизации отчетов о сбоях. Хоккей добавляет собственный обработчик для незаметных исключений задач, которые всегда прекращают приложение после отправки отчета о сбоях на свои серверы. У меня нет проблем с тем, что они делают это для обработчика AppDomain UnhandledException, но мне нужно остановить их, убивая приложение в незаметных исключениях задачи.

Кажется, что есть механизм для установки специального обработчика для этих исключений, но я не вижу, как его установить в Xamarin iOS Hockey SDK

Вот код, который мы используем, чтобы включить хоккей

UnobservedTaskException

Кто-нибудь знает, как переопределить поведение HockeyApp по умолчанию для StartManagers?

c#,ios,xamarin,xamarin.ios,hockeyapp,

1

Ответов: 3


3 "> принят

ThrowExceptionAsNative жестко закодирована в способе без прямого способа удаления.TaskScheduler.UnobservedTaskException += (sender, e) => ThrowExceptionAsNative(e.Exception);StartManager

HockeySDK-Windows

Ссылка: https://github.com/bitstadium/HockeySDK-Xamarin/blob/28e67ecba14d00c8bea8043e08678af6044d33cf/source/HockeySDK.iOSBindings/Additions.cs#L43

Лично я строю из источника, публично раскрываю UnobservedTaskExceptionи добавляю методы настройки для включения / исключения обработчика по умолчанию при HockeySDK-Windowsвызове. Это так же, как HockeyApp делает с UnobservedTaskExceptionapi.

Таким образом, при ловле у UnobservedTaskExceptionвас есть возможность самостоятельно обрабатывать его или бросать его как собственное исключение.

Это очень похоже на оригинальные привязки Xamarin и я не понимаю, почему они сделали это так, как в RegisterUnobservedTaskExceptionHandler()коде, они удалили обработку по умолчанию UnobservedTaskException:

Начиная с .NET 4.5, по умолчанию UnobservedTaskExceptions больше не приводят к сбою приложения. SDK не был адаптирован для этого и по-прежнему регистрирует эти ошибки и заставляет программу выйти, хотя это может и не понадобиться или не предназначено.

Пользователи, которые хотят продолжать использовать обработчик, должны добавлять вызовы RegisterDefaultUnobservedTaskExceptionHandler()или Configure() после вызова HockeySDK.Xamarin.

В течение нескольких клиентов , которые не хотят пользовательские сборки EventHandler, я делаю EventHandlerудаление с помощью отражения после на StartManagerвызов и добавить в наш пользовательский обработчик. Используя этот подход, вы не будете иметь ThrowExceptionAsNativeдоступную публикацию для исключения исключения в качестве родного, если это необходимо, но это может сделать другое отражение: - /


1

В соответствии с этим вопросом поддержки ответ отрицательный.

https://support.hockeyapp.net/discussions/problems/60521-hockeysdkuwp-413-no-way-to-disable-unobservedtaskexceptions

И эта фиксация, похоже, пытается исправить проблему

https://github.com/bitstadium/HockeySDK-Windows/commit/1c1bc9715e64dd1283b3dc5db40ccdc9e59f4fc3


0

Я решил эту проблему с этой строкой кода:

var ex = t.Exception;

когда задача выдает исключение, я беру результат

if ((t.IsFaulted) || (t.IsCanceled))
{
    var ex = t.Exception;
c #, ios, xamarin, xamarin.ios, hockeyapp,
Похожие вопросы