Como faço para corrigir o Sistema".Threading.Tarefas.TaskCanceledException: 'A tarefa foi cancelada.'" exceção no aplicativo de saída (Winforms)?

0

Pergunta

Eu tenho um WinForms leitor de MP3 aplicativo da área de trabalho (.NET Framework 4.7.2) que está a utilizar ElementHost para hospedar um MediaElement de controle e tem um DispatcherTimer para controlar a reprodução (como atualizar um controle Deslizante).

Tudo funciona bem, mas quando eu sair do app, recebo a "System.Threading.Tasks.TaskCanceledException: 'A task was canceled.'" exceção (eu aviso-a apenas quando executando sob o depurador).

Não é nada, mas um incômodo e se sente o mais inofensivo, mas eu não gosto de exceções que eu não entendo. A pilha de chamadas não é super útil:

>   mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task task)   Unknown
    mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task task)  Unknown
    WindowsBase.dll!System.Windows.Threading.DispatcherOperation.Wait(System.TimeSpan timeout)  Unknown
    WindowsBase.dll!System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherOperation operation, System.Threading.CancellationToken cancellationToken, System.TimeSpan timeout)   Unknown
    WindowsBase.dll!System.Windows.Threading.Dispatcher.Invoke(System.Action callback, System.Windows.Threading.DispatcherPriority priority, System.Threading.CancellationToken cancellationToken, System.TimeSpan timeout) Unknown
    WindowsBase.dll!MS.Internal.WeakEventTable.OnShutDown() Unknown
    WindowsBase.dll!MS.Internal.WeakEventTable.WeakEventTableShutDownListener.OnShutDown(object target, object sender, System.EventArgs e)  Unknown
    WindowsBase.dll!MS.Internal.ShutDownListener.HandleShutDown(object sender, System.EventArgs e)  Unknown

Isso está acontecendo porque o WPF pilha não obter descartados corretamente, de alguma forma? Eu garantir a minha DispatchTimer está parado no MainForm_FormClosing mas, talvez, há algo mais que eu precise limpar?

Não é uma questão crítica, é claro, por irritante.

c# winforms wpf
2021-11-22 00:41:19
2

Melhor resposta

1

Essa Exceção é lançada quando um método assíncrono não é permitido executar para conclusão - a fim de que outros métodos assíncronos com o mesmo CancellationToken pode parar de processar correctamente, se necessário.

Você pode ignorá-lo, como parece ser uma exceção não identificada a partir de uma dessas bibliotecas que você está usando. Se ele realmente te incomoda e você sabe que não é em sua base de código, você pode mergulhar a Exceção, mas isso geralmente não é considerada uma boa prática.

2021-11-22 00:48:57

Há uma boa maneira de encontrar o método que está causando esse exceção ser lançada? Eu me sentiria melhor se eu soubesse qual a biblioteca está causando. A pilha de chamadas no exceção jogando o tempo não é muito útil, e dado que é app de desligamento, há muito poucos threads em execução esquerda.
David Airapetyan

Você poderia envolver o seu código com um prendedor cláusula, e colocar um ponto de interrupção para ver se você pode localizar o autor do crime, a pilha de chamadas. Infelizmente, se uma de suas bibliotecas pegou uma Exceção e re-lançada uma nova CancellationException, você não vai ter a história completa, e a sua melhor aposta, em seguida, é para ver se você pode mergulhar na fonte da biblioteca, se disponível.
Chris
0

Parece um problema .NET Framework 4.7.2. O problema e a solução são descritos aqui: TaskCanceledException em ShutDownListener.

O tl'dr é que adicionando o seguinte ao meu App.configuração feita a exceção de ir embora:

  <runtime>
    <AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
  </runtime>
2021-11-22 03:44:26

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................