Comment faire pour déterminer si la Tâche.Run est terminé dans une boucle
Cela peut être une drôle de question et c'est vraiment mon but pédagogique afin que je puisse l'appliquer dans des scénarios d'avenir peut venir.
Je suis à l'aide de C#.
Je suis en stress test donc ce n'est pas tout à fait le code de production.
- Je télécharger des données sur mon serveur via un service web.
J'ai démarrer le service à l'aide d'une Exécution.De la tâche.
- Je vérifier pour voir si la Tâche est terminée avant de permettre à la prochaine course.Tâche pour commencer.
Ceci est fait dans une boucle.
Cependant, parce que je suis en utilisant un système modulaire déclaré Tâche ne sera pas le résultat d'être touché?
Je pourrais déclarer un travail locaux.Exécuter variable mais je veux voir jusqu'où je peux aller avec cette question, 1er.
Si la Tâche.Peut déclencher un événement à-dire qu'il est terminé, alors c'est peut-être pas un problème?
C'est mon code:
//déclaration de module:
private static Task webTask = Task.Run(() => { System.Windows.Forms.Application.DoEvents(); });
//dans la fonction appelée par l'intermédiaire d'un minuteur
if (webTask.IsCompleted)
{
//keep count of competed tasks
}
webTask = Task.Run(() =>
{
try
{
wcf.UploadMotionDynamicRaw(bytes); //my web service
}
catch (Exception ex)
{
//deal with error
}
);
webTask.ContinueWith...
.SALUT, merci pour aquick réponse. Je vais regarder cela maintenant et rapport - merci 🙂
alors quand j'ai modifier mon code:
webTask = nouvelle Tâche(wcf.UploadMotionDynamicRaw(octets));
Il me donne une erreur " impossible de convertir de 'void' à 'Action'?
OriginalL'auteur Andrew Simpson | 2015-01-04
Vous devez vous connecter pour publier un commentaire.
De l'OMI, vous n'avez pas besoin de la minuterie. À l'aide de Continuation De Tâche vous abonnez-vous à la fait événement:
La sortie est:
Votre code pourrait ressembler à ceci:
Avec continuation de tâche vous pouvez même différencier échoué et succès résultat du processus, si vous voulez compter seulement succès de tâches à l'aide de la TaskContinuationOptrions.
Serait la downvoter veuillez expliquer?
OriginalL'auteur pasty
Vous pouvez attendre votre tâche à remplir par l'attente de votre tâche de cette
qui asynchrone attendre 'webTask' pour terminer. Au lieu de la minuterie vous pouvez utiliser
await Task.Delay
qui asynchrone d'attendre le délai d'expiration. Je voudrais également envisager de faire de la wcf appel asynchrone de sorte que vous n'avez pas à appeler à l'intérieur deTask.Run
. Voir cette question pour quelques conseils.J'avais réécrire le code comme suit:
OriginalL'auteur Ned Stoyanov