Je suis implémentant une interface qui nécessite des implémentations de donc mon commençant doit être comme: p> Je ne fais pas savoir ce que je devrais revenir. Je n'applique que Begindosomething code> et
enddosomething code> méthodes. Cependant, mon
Dosomething code> n'est pas vraiment longuement.
Pour la simplicité suppose
dosomething code> compare seulement deux variables et revenez si un> B
Begindosomething code> car je dois, non pas parce que ma méthode est longue. Dois-je mettre en œuvre mon propre
iAsyncResult code>? Y a-t-il une implémentation déjà dans les bibliothèques ?NET? P> P>
4 Réponses :
Ceci est un peu rapide et sale, mais vous pouvez mettre en œuvre une classe qui implémente iAsyncResult comme SO:
return new MyAsyncResult(a > b);
Je pense que la propriété asyncwaithandle code> doit renvoyer une référence à un Set i>
manuelResetevent code> (ou similaire). Il est parfaitement raisonnable pour les clients d'essayer d'attendre la poignée et cela ne devrait pas provoquer une exception.
Certes, nous pourrions faire cela, mais comme un gaithandle est un objet coûteux, il semble gaspillé de créer un quand il sera jamais b> pertinent.
Le code manque l'appel de rappel, requis (s'il n'est pas null).
Aww, ⁺¹, il faut mettre en œuvre uniquement des getters ... ce n'est pas évident, je ne pouvais pas comprendre pourquoi Bool public est composé code> ne peut être mentionné comme non implémenté.
La façon de faire de la tâche rapide est d'utiliser un délégué: La vocation de cette approche est que vous devez faire attention si deux threads appelleront cette méthode simultanément 'll obtenir une erreur. p> p>
Pas réellement rapide mais difficile à argumenter avec la simplicité. Omettre le retourvalue. Je ne vois pas l'erreur.
Que devrait être dans le enddosomething code> alors? Je suis désolé je suis très nouveau sur la programmation asynchrone
En fin de compte *, ce serait la même chose que Func.begininvoke: iAsyncreulsulte, vous devez donc déléguer la responsabilité de la mise en œuvre de déléguer.
func.endinvoke? Mais Func n'est déclaré que dans la méthode de début *, on ne peut pas être appelé à la fin *
Je ne suis pas sûr que je ne manque pas quelque chose, mais aujourd'hui, vous pouvez simplement revenir taskPletedtask code> /
tâche.fromResult code>.
Tâche Code> Implements
iAsyncResult CODE>
protected override IAsyncResult BeginDoSomething(int a, int b, AsyncCallback callback, object state)
{
return Task.FromResult(a > b);
}
Je vous suggère de suivre les instructions ICI Pour pouvoir créer vos implémentations à l'aide de méthodes basées sur les tâches au cas où l'un d'entre eux s'avère être longue. Si Dosomething est courte en cours d'exécution, vous pouvez le bloquer en créant une tâche code> code> à partir de son résultat