web-dev-qa-db-fra.com

RunSynchronously ne peut pas être appelé sur une tâche déjà démarrée

Je rencontre un problème avec une classe c # que j'ai créée pour tester unitaire mon application, en particulier le problème concerne un objet System.Threading.Tasks.Task.

J'ai une liste de ces objets et je veux les exécuter de manière synchrone.

J'appelle ce qui suit:

myTask.RunSynchronously();

Lorsque je le fais, je reçois toujours l'erreur suivante et je ne sais pas pourquoi je peux le réparer.

System.InvalidOperationException: RunSynchronously ne peut pas être appelé sur une tâche qui a déjà été démarrée.

Quelqu'un a une idée?

28
amateur

Le problème est que vous a commencé la tâche lorsque vous appelez TaskFactory.StartNew - Je veux dire, c'est même au nom de la méthode que vous démarrez la tâche. StartNew crée la tâche, puis appelle Start en votre nom. = D

Si vous le souhaitez, vous pouvez soit Wait sur la tâche, comme l'a dit @Peter Ritchie, soit créer la tâche manuellement comme ceci:

var task = new Task(() => { ... });
task.RunSynchronously();
33
Tejs

C'est déjà commencé, utilisez simplement myTask.Wait()

30
Peter Ritchie