Cette méthode async le manque d '"attendre" opérateurs et exécuté de manière synchrone
mon programme a 3 avertissements de la déclaration suivante:
Cette méthode async le manque d '"attendre" opérateurs et exécuté de manière synchrone.
Pensez à utiliser le 'attendre d' " opérateur d'attendre de non-blocage des appels d'API,
ou 'attendent Tâche.Exécuter (...) " pour faire lié au PROCESSEUR de travailler sur un thread d'arrière-plan.
Qu'est-ce que l'avertissement essayez de me dire? Que dois-je faire?
C'est mon code: Est-il en cours d'exécution à l'aide de multi-threading?
static void Main(string[] args)
{
Task task1 = new Task(Work1);
Task task2 = new Task(Work2);
Task task3 = new Task(Work3);
task1.Start();
task2.Start();
task3.Start();
Console.ReadKey();
}
static async void Work1()
{
Console.WriteLine("10 started");
Thread.Sleep(10000);
Console.WriteLine("10 completed");
}
static async void Work2()
{
Console.WriteLine("3 started");
Thread.Sleep(3000);
Console.WriteLine("3 completed");
}
static async void Work3()
{
Console.WriteLine("5 started");
Thread.Sleep(5000);
Console.WriteLine("5 completed");
}
async
ne signifie pas "multi-thread". Voir mon introduction à la async
post pour une explication de ce async
.Merci, l'article est très agréable et facile à comprendre
OriginalL'auteur mjb | 2016-12-15
Vous devez vous connecter pour publier un commentaire.
La
async
mot-clé, par lui-même, ne fait pas vraiment beaucoup. Supprimer à partir de votre code et de votre code d'agir exactement la même.Ce n'
async
faire?await
mot-cléawait
s qui sont présents dans le corps de la méthode.Task
.Toutefois, si vous avez une) N'ont pas de
await
s dans votre corps de la méthode et b) sontvoid
de retour, alors rien de spécial, sera atteint. L'avertissement du compilateur essaye d'être clair à ce sujet - unasync
méthode sans aucuneawait
s tout simplement ne fait pas de sens.await
s sont la plus importante partie de cette fonctionnalité.OriginalL'auteur Damien_The_Unbeliever
Oui, votre code sera probablement utiliser le multi-threading. Cependant, il serait toujours temps de le faire si vous venez de supprimer la
async
mot-clé. Comme vous n'avez pas à expliquer pourquoi il est là, je vous suggère de le retirer.Si vous voulez un async/await modèle, vous pouvez utiliser
Task.Delay()
mais je vous suggère de lire plus sur async/await avant de l'utiliser:OriginalL'auteur nvoigt
Vous avez utilisé "
async
mot-clé avec la méthode qui indique que Travail1(),Travaux2() et Work3() les méthodes sont exécutées de manière asynchrone,mais vous n'avez pas utilisé 'attendre' mot-clé.De sorte qu'il soit exécuté en tant que de façon synchrone.L'utilisation de 'await
mot-clé si vous voulez exécuter de manière asynchrone.OriginalL'auteur jignesh
Vous avez désigné vos méthodes (Travail1, Travaux2, Work3) avec le mot-clé
async
mais aucun de votre code à l'intérieur de ces méthodes utilise leawait
opérateur d'invoquer des appels asynchrones.OriginalL'auteur Hawkmooon