Как мне диагностировать это ненаблюдаемое исключение? - PullRequest
0 голосов
/ 18 июня 2019

У меня есть проект C # webapi, который взаимодействует как клиент-сигнализатор с другим приложением. Периодически он выдает это исключение, которое вызывает его сбой. Я могу воспроизвести исключение, выполнив на нем некоторые нагрузочные тесты, но, несмотря на поиск высокого и низкого уровня, я не могу точно определить, где происходит это исключение, и предотвратить его.

System.AggregateException: A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread. ---> System.NullReferenceException: Object reference not set to an instance of an object.
at System.Web.ThreadContext.AssociateWithCurrentThread(Boolean setImpersonationContext)
at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext)
at System.Web.HttpApplication.System.Web.Util.ISyncContext.Enter()
at System.Web.Util.SynchronizationHelper.SafeWrapCallback(Action action)
at System.Web.Util.SynchronizationHelper.<>c__DisplayClass22_0.<QueueAsynchronous>b__0(Task _)
at System.Threading.Tasks.ContinuationTaskFromTask.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
--- End of inner exception stack trace ---
---> (Inner Exception #0) System.NullReferenceException: Object reference not set to an instance of an object.
at System.Web.ThreadContext.AssociateWithCurrentThread(Boolean setImpersonationContext)
at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext)
at System.Web.HttpApplication.System.Web.Util.ISyncContext.Enter()
at System.Web.Util.SynchronizationHelper.SafeWrapCallback(Action action)
at System.Web.Util.SynchronizationHelper.<>c__DisplayClass22_0.<QueueAsynchronous>b__0(Task _)
at System.Threading.Tasks.ContinuationTaskFromTask.InnerInvoke()
at System.Threading.Tasks.Task.Execute()<---

Мое приложение - .net 4.7, а концентратор сигналов работает на .net 4.7. Я почти уверен, что сервер не задействован. Если я перезапускаю клиент, он начинает с того места, где остановился, и продолжает работать.

В клиенте webapi есть несколько асинхронных методов, и я подтвердил, что все внутренние вызовы ожидаются, и у них всех есть обработчики исключений. Конечные точки webapi также помечены как асинхронные.

Я провел несколько дней, пытаясь разобраться в этом исключении. Любые советы будут с благодарностью приняты! Рад разработать с дополнительной информацией по мере необходимости.

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

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

0 голосов
/ 18 июня 2019

Похоже, у вас ThrowUnobservedTaskExceptions установлено на true.Рекомендованный параметр (и значение по умолчанию для .NET 4.7) - false.

. Из трассировки стека я бы предположил, что ASP.NET (pre-Core) зависит от игнорируемых исключений задач, которые не учитываются.Хотя это не идеально, это также не удивительно.

Я рекомендую удалить конфигурацию, которая включает ThrowUnobservedTaskExceptions.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...