Comment pouvez-vous bloquer jusqu'à la fin d'un événement asynchrone?Blocage jusqu'à la fin d'un événement
est ici un moyen de bloquer jusqu'à ce que l'événement est appelé en mettant un drapeau dans le gestionnaire d'événements et vote le drapeau:
private object DoAsynchronousCallSynchronously()
{
int completed = 0;
AsynchronousObject obj = new AsynchronousObject();
obj.OnCompletedCallback += delegate { Interlocked.Increment(ref completed); };
obj.StartWork();
// Busy loop
while (completed == 0)
Thread.Sleep(50);
// StartWork() has completed at this point.
return obj.Result;
}
Est-il possible de le faire sans vote?
La bonne réponse. +1 – spender
À moins que l'API/l'objet n'expose pas un appel synchrone (en fait, je travaille avec un appel qui ne l'est pas). – ctacke
Dans le plus simple des termes, vous avez peut-être raison, mais que se passe-t-il si vous voulez effectuer l'opération asynchrone X fois et bloquer l'appelant jusqu'à ce que tous les X soient terminés? Si c'est ce que le PO essaie de me demander, je reformulerais probablement la question, mais quand je lis la question, c'est la première chose qui me saute aux yeux. – Joseph