Comment faire un Asynchrone de la Méthode renvoie une valeur?
Je sais comment faire des méthodes Asynchrones, mais dire que j'ai une méthode qui est beaucoup de travail, puis renvoie une valeur booléenne?
Comment puis-je retourner une valeur booléenne sur le rappel?
Clarification:
public bool Foo(){
Thread.Sleep(100000); //Do work
return true;
}
Je veux être en mesure de faire ce asynchrone.
Vous devez vous connecter pour publier un commentaire.
Il ya quelques façons de le faire... le plus simple est d'avoir la méthode async également faire le suivi de l'opération. Une autre approche est de passer dans un rappel, c'est à dire
Une autre approche serait d'élever un événement (avec le résultat dans le cas des arguments de données) lorsque l'opération asynchrone est terminée.
Aussi, si vous utilisez le TPL, vous pouvez utiliser
ContinueWith
:De C# 5.0, vous pouvez spécifier la méthode
bool result = await doAsyncOperation();
await
quelque chose dans le corps de la méthode. De retourTask.FromResult(true)
ne change pas. Le corps de la méthode s'exécute de façon synchrone sur l'appelant fil jusqu'à ce que les premiers attendent.Task.FromResult
directement, plutôt que d'utiliserawait
. Cependant, comme Drew l'a noté plus tôt, cela fonctionne de façon synchrone sur le thread appelant.Probablement la façon la plus simple de le faire est de créer un délégué et ensuite
BeginInvoke
, suivi d'une attente à un certain moment dans l'avenir, et unEndInvoke
.WaitHandle.WaitOne
méthode: msdn.microsoft.com/en-us/library/58195swd.aspxUtiliser un BackgroundWorker. Il vous permettra d'obtenir des rappels sur l'achèvement et vous permettent de suivre les progrès. Vous pouvez définir la valeur de Résultat sur les arguments de l'événement à la valeur qui en résulte.
Peut-être vous pouvez essayer de BeginInvoke un délégué pointant vers votre méthode comme suit:
Ensuite utiliser la valeur de la méthode que vous avez envoyé comme AsyncCallback pour continuer..
Vous devez utiliser le EndXXX de votre méthode async pour retourner la valeur. EndXXX doit attendre jusqu'à ce qu'il y a un résultat à l'aide de la IAsyncResult de WaitHandle et que le retour à la valeur.