Alors, voici deleagte and event
public delegate Task SomeEventHandler(SomeEventArgs e); ... public event SomeEventHandler OnSomething;
Abonnés (multiples)
some.OnSomething += DoSomething; ... public async Task DoSomething(SomeEventArgs e) { await SomethingElse(); eA = true; }
Appel d’événement
if (this.OnSomething != null) await this.OnSomething(args); // Here args.A is false // It should be true
Le problème est que la dernière partie continue même lorsque DoSomething n’est pas terminé. Quel serait le problème?
Le problème ici est que plusieurs instances de SomeEventHandler
sont en cours d’exécution et qu’il existe donc plusieurs valeurs de Task
cours de création. L’appel d’ await
ne fonctionne que sur l’un d’eux, d’où l’ await
de savoir si c’est la méthode DoSomething
qui est attendue ou non.
Pour résoudre ce problème, vous devrez await
chaque valeur de Task
créée.
if (this.OnSomething != null) { foreach (var d in this.OnSomething.GetInvocationList().Cast()) { await d(args); } ]