supposer au lieu de l'enveloppe Le le code dans le répartiteur code> est toujours exécuté avant que le Peut-on expliquer ce comportement? Merci p> WPF, .NET Framework 4.7 Projet P> P> graphviewmodels code> est un
Observablecollection
updateChartSwithValuesasync Code> Methode appelle dans le
Continuwith code> Délégué, la méthode n'est plus attendue. J'ai déjà essayé de changer le
configureawait (false) code> sur
vrai code> mais rien ne semble changer. Au-dessous du code édité: p>
reste continue avec code> délégué code> 't attendre
updatechartwithvaluesasync code> pour compléter plus, levant des bugs méchants. p>
3 Réponses :
Lorsque vous utilisez . Dans votre deuxième exemple, vous n'attendez pas cela directement; Vous attendez le résultat de l'expression chaînée: p> alors que seul l'objet final ( Si vous utilisez async / attendre, il serait prudent de < / Strong> Utilisez les mots-clés d'une méthode asynchrone, car le mélange avec les opérations basées sur le rappel conduit à un code déroutant tel que celui-ci. P> P> Dispatcher.Invokeasync code> renvoie un
DispatcherOveration code>. Ceci est un type attendable, car il implémente une méthode appelée
getawaiter () code> qui renvoie un type qui implique
inotifycompletion code>.
attendre code > sur le résultat de
Dispatcher.invokeasync code> directement, l'achèvement de
DispatcherOperSeration code> est attendu avant l'appel sur
updateChartSwithvaluesasync code>. P>
tâche code>) est attendu, ce qui signifie que la fonction que vous passez à < Code> Continuwith code> peut être exécuté, avant
Dispatcher.invokeasync code> est terminé. p>
Comme autre réponse mentionnée, vous ne devriez pas mettre Si vous voulez vraiment attendre pour continuer à finir dans la plupart des Notez que async t => attendre updateCharetswithvitvaluesasync code> dans votre
Continuwith code> rappel, car il aurait en attente de la tâche
> Continuwith (...) Code> Méthode, qui finirait éventuellement à finir immédiatement.
attendre code>, vous devriez
Débit ( ) CODE> Votre
Tâche
attendre code> est traduit en bloc de code impliquant
Continuwith code> qui fonctionnalités
ConfigureAWAIT code> Options et plus, donc vous feriez mieux d'utiliser
async attendre code> constructions comme si vous avez essayé dans votre premier exemple. p> p>
Mettez simplement, Ce que je suggère, n'utilisez pas Voici une autre question connexe dans le sujet: Utilisez un rappel ASYNC avec la tâche.Continuewith P>
Si vous voulez en savoir plus en profondeur, le code source de .Continuewith () code> ne fait pas
attendre code> dans sa mise en œuvre, il exécute plutôt la transmission du délégué tel qu'il est et renvoie une tâche de tâche (
Tâche
.Continuewith () code> Dans ce cas, il suffit de vous attendre. Si vous souhaitez vraiment conserver le code actuel, vous pouvez faire
.Continuewith (). Doulez () code>, qu'est-ce qui fera le tour? P>
continue avec code>: https://referencesource.microsoft.com/#msmscorlib/system/threading/tasks/task.cs 4532 p>
Bonne réponse. Une alternative à Le débouché code> est en attente de deux fois:
attendre code >
Je ne suis pas expert, mais je pense que UpdatechartThithValuesasync est en fait attendu, mais sur un autre fil. Essayez de ne pas mélanger ASYNC / Attendre avec des outils surtout utiles avant que ASYNC / AWAIT n'existait (comme Continuwith ... Je ne sais pas pourquoi vous voudriez l'utiliser ici).