Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 KB4103472 & TaskCanceledException  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
Такая ситуация: в среду вечером на рабочий комп по windows update прилетел этот KB (Предварительная версия пакета исправлений для .NET Framework 3.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 в Windows 7 и Server 2008 R2 для 64-разрядных систем (KB4103472), 2018-05). Я всю среду с утра возился с одним приложением (WPF, target framework=4.5), и всё было в порядке. Прихожу в четверг с утра на работу, перезагружаю комп, и это приложение, которое день назад вело себя абсолютно нормально и предсказуемо, при выходе стало выбрасывать TaskCanceledException:

System.Threading.Tasks.TaskCanceledException: Отменена задача.
в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
в System.Windows.Threading.DispatcherOperation.Wait(TimeSpan timeout)
в System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherOperation operation, CancellationToken cancellationToken, TimeSpan timeout)
в System.Windows.Threading.Dispatcher.Invoke(Action callback, DispatcherPriority priority, CancellationToken cancelltionToken, TimeSpan timeout)
в MS.Internal.WeakEventTable.OnShutDown()
в MS.Internal.WeakEventTable.WeakEventTableShutDownListener.OnShutDown(Object target, Object sender, EventArgs e)
в MS.Internal.ShutDownListener.HandleShutDown(Object sender, EventArgs e)

- это полный стектрейс, предоставляемый одним прикладным методом, который рекурсивно вытаскивает стектрейсы от InnerException, TargetInvocationException, AggregateException, итд. Т.е. то, что приведено выше - это всё, что есть. Вчера еще день был посвящен на выискивание причины этого TaskCanceledException. Под вечер вспомнил, что в среду ставился какой-то апдейт, посмотрел - ага, для .Net Framework. Снес этот апдейт - всё снова заработало нормально. Никто с аналогичной ситуаацией не сталкивался?
P.S. Причем к моменту вылета этого приложение уже наполовину завершено - например, используемый NLog уже успел закрыть все свои логгеры (используется 2 target'а: console и file), и вышеприведенное - от обычного Console.WriteLine.
18 май 18, 06:17    [21419241]     Ответить | Цитировать Сообщить модератору
 Re: KB4103472 & TaskCanceledException  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38458
Сон Веры Павловны,
Вполне может быть что KB ни при чем и просто не освобождаются корректно ресурсы.
А обновление просто "звезды сложило по другому".
- ошибка на экран выходит? Или только в логе?
- если просто запуск и сразу закрыть тоже? Или после некоторого функционала?
18 май 18, 07:45    [21419289]     Ответить | Цитировать Сообщить модератору
 Re: KB4103472 & TaskCanceledException  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
И этот тоже не читатель...
Сон Веры Павловны
Снес этот апдейт - всё снова заработало нормально.

Petro123
и просто не освобождаются корректно ресурсы

Ага, поучите давайте меня корректно освобождать ресурсы.
18 май 18, 08:26    [21419344]     Ответить | Цитировать Сообщить модератору
 Re: KB4103472 & TaskCanceledException  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38458
Сон Веры Павловны
этот тоже не читатель...
есть куча примеров когда апдейт просто вскрывает недостаток кода.

Сон Веры Павловны
Ага, поучите давайте меня корректно освобождать ресурсы.
профи тоже ошибаются))).
Как пить дать)).
18 май 18, 08:39    [21419360]     Ответить | Цитировать Сообщить модератору
 Re: KB4103472 & TaskCanceledException  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
Petro123
Сон Веры Павловны
этот тоже не читатель...
есть куча примеров когда апдейт просто вскрывает недостаток кода.

Приложению, про которое выше шла речь, уже лет 5, и за все 5 лет недостаток не вскрывался, а тут вдруг вскрылся, ага.
18 май 18, 08:55    [21419373]     Ответить | Цитировать Сообщить модератору
 Re: KB4103472 & TaskCanceledException  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38458
Сон Веры Павловны,
ОК.
Один шанс на 500 что бага в апдейте MS.
На вопросы хотите отвечайте. Хотите нет.
18 май 18, 09:00    [21419377]     Ответить | Цитировать Сообщить модератору
 Re: KB4103472 & TaskCanceledException  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3305
преостановить при заверешении отладчиком приложение и посмотрите в окне Task'ов, какие таски в данный момент выполняются.
Из ошибки же видно, что выполнялся таск и он был отменён, судя по всему в момент освобождения ресурсов.
Найдете нужный таск, поймете природу происходждения ошибки.
18 май 18, 12:56    [21420081]     Ответить | Цитировать Сообщить модератору
 Re: KB4103472 & TaskCanceledException  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
Roman Mejtes
преостановить при заверешении отладчиком приложение и посмотрите в окне Task'ов, какие таски в данный момент выполняются.
Из ошибки же видно, что выполнялся таск и он был отменён, судя по всему в момент освобождения ресурсов.
Найдете нужный таск, поймете природу происходждения ошибки.

Это приложение не использует таски. Вообще. И async-await тоже не использует. Он так сделано, что ему это не нужно. У меня подозрение, что что-то они там нахимичили со слабой привязкой биндингов к INPC (см. вторую снизу строку стектрейса - там фигурирует некий класс WeakEventTable). И да, само приложение в непосредственно слабые сслыки и события не использует - только опосредованно в виде биндингов.
18 май 18, 13:14    [21420172]     Ответить | Цитировать Сообщить модератору
 Re: KB4103472 & TaskCanceledException  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3305
Сон Веры Павловны
Roman Mejtes
преостановить при заверешении отладчиком приложение и посмотрите в окне Task'ов, какие таски в данный момент выполняются.
Из ошибки же видно, что выполнялся таск и он был отменён, судя по всему в момент освобождения ресурсов.
Найдете нужный таск, поймете природу происходждения ошибки.

Это приложение не использует таски. Вообще. И async-await тоже не использует. Он так сделано, что ему это не нужно. У меня подозрение, что что-то они там нахимичили со слабой привязкой биндингов к INPC (см. вторую снизу строку стектрейса - там фигурирует некий класс WeakEventTable). И да, само приложение в непосредственно слабые сслыки и события не использует - только опосредованно в виде биндингов.
ну если вы их не используйте, это не значит, что в WPF они не используются :)
18 май 18, 13:35    [21420218]     Ответить | Цитировать Сообщить модератору
 Re: KB4103472 & TaskCanceledException  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
Выяснилось, что я не один такой:
обсуждение на SoF
И разработчики roslyn тоже прошлись по этим граблям.

Вроде как эту штуку можно отключить - но только для фреймворка от 4.7.2 и выше (а фикс действует на все фреймворки - молодцы, чо): https://github.com/Microsoft/dotnet/blob/master/Documentation/compatibility/wpf-AppDomain-shutdown-handling-may-now-call-Dispatcher.Invoke-in-cleanup-of-WeakEvents.md
Пока в ловушку исключений верхнего уровня (исключение ловит именно она, без неё вообще было бы тихо, только студия бы ругалась) встроил следующее:
void PrepareException(Exception error, string source)
{
  if (Application.Current.Dispatcher.HasShutdownFinished && error is TaskCanceledException)
    return;
  ...............
}

Причину ошибки поймать так и не удалось, она практически нелокализуема - встречается в куче проектов (при этом не использующих weak events напрямую), и не ловится даже обрезанием проекта по частям - то вдруг перестает вылетать, то опять начинает.
Посмотрим, что с этим они сделают дальше.
27 июн 18, 09:02    [21524070]     Ответить | Цитировать Сообщить модератору
 Re: KB4103472 & TaskCanceledException  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
(P.S. причина ошибки, если что - не очищенная WeakEventTable. А Task, который canceled, запускается внутри сборок CLR - т.е. он совсем не мой).
27 июн 18, 09:08    [21524084]     Ответить | Цитировать Сообщить модератору
 Re: KB4103472 & TaskCanceledException  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
Ну наконец-то. Не прощло и полгода - управились за 5 месяцев:
Fixes a crash that occurs because a TaskCanceledException can occur during shutdown of some WPF applications. Applications that continue to do work that involve weak event patterns or data binding after Application.Run() returns values are known to be vulnerable to this crash.

https://support.microsoft.com/en-ca/help/4459942/description-preview-of-quality-rollup-net-framework-4-6-4-7
Пришло сегодня с KB 4462500.
В проектах на фреймворке 4.7 сабж вылетать перестал.
19 окт 18, 11:49    [21708819]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить