Come posso risolvere il Sistema".La filettatura.Attività.TaskCanceledException: 'Un compito è stato annullato.'" eccezione su app uscita (Winforms)?

0

Domanda

Ho un form di windows lettore MP3 desktop app.NET Framework 4.7.2) che utilizza ElementHost per ospitare un MediaElement il controllo e ha un DispatcherTimer per controllare la riproduzione (ad esempio l'aggiornamento di un dispositivo di Scorrimento).

Tutto funziona bene, ma quando mi è uscita l'app, ho l' "System.Threading.Tasks.TaskCanceledException: 'A task was canceled.'" eccezione (l'ho notato solo quando si esegue con il debugger).

Non è niente, ma un fastidio e si sente per lo più innocui, ma non mi piace eccezioni che non capisco. Lo stack di chiamate non è super utile:

>   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

Questo succede perché il WPF stack di non avere smaltito correttamente in qualche modo? Garantire che il mio DispatchTimer è fermato in MainForm_FormClosing ma forse c'è qualcos'altro che devo pulire?

Non sono un problema, naturalmente, da fastidiosi.

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

Migliore risposta

1

Questa Eccezione viene generata quando un metodo asincrono non è consentita l'esecuzione di completamento, in modo che altri metodi asincroni con la stessa CancellationToken può interrompere il trattamento con grazia, se necessario.

Probabilmente è possibile ignorare, come sembra essere un'eccezione non rilevata da una di quelle librerie che si sta utilizzando. Se davvero ti dà fastidio e sai che non è nel tuo codice, si potrebbe immergere l'Eccezione, ma questo non è generalmente considerata una buona pratica.

2021-11-22 00:48:57

C'è un buon modo per trovare il metodo che sta causando questa eccezione? Mi sentirei meglio se sapevo che la libreria che sta causando. Lo stack di chiamate a eccezione di lancio, il tempo non è molto utile, e dato che si tratta di app di arresto, ci sono pochi thread in esecuzione di sinistra.
David Airapetyan

Si potrebbe racchiudere il codice con una clausola catch, e mettere un punto di interruzione su di esso per vedere se è possibile individuare l'autore del reato nel stack di chiamate. Purtroppo, se una delle vostre librerie ha catturato un'Eccezione e ri-generata una nuova CancellationException, non sarà possibile ottenere la storia completa, e la cosa migliore poi è da vedere se è possibile immergersi nella fonte della biblioteca (se disponibile).
Chris
0

Sembra un problema .NET Framework 4.7.2. Il problema e una soluzione sono descritti qui di seguito: TaskCanceledException in ShutDownListener.

Il tl'dr è che aggiungendo il seguente per la mia App.config fatta eccezione per andare via:

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

In altre lingue

Questa pagina è in altre lingue

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