mon programme a 3 avertissements de la déclaration suivante:
Cette méthode asynchrone manque d'opérateur "wait" et s'exécutera de manière synchrone. Songez à utiliser l'opérateur "wait" pour attendre les appels d'API non bloquants, Ou "wait Task.Run (...)" faire un travail lié au CPU sur un thread d'arrière-plan.
Quel est l'avertissement essayez de me dire? Que devrais-je faire?
Ceci est mon code: Est-ce qu'il fonctionne en 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");
}
Le mot clé async
name__, en soi, ne fait pas grand chose. Supprimez-le de votre code et votre code agira exactement de la même manière.
Que fait async
name__?
await
name__await
name__s présents dans le corps de la méthode.Task
name__.Toutefois, si a) vous n'avez aucun await
name__s dans le corps de votre méthode et b) si void
est renvoyé, rien de spécial ne sera obtenu. L’avertissement du compilateur tente d’être clair à ce sujet - une méthode async
sans await
name__s n’a tout simplement pas de sens. await
name__s est la partie la plus importante de cette fonctionnalité.
Oui, votre code utilisera probablement le multi-threading. Cependant, il le ferait toujours si vous veniez de supprimer le mot clé async
. Comme vous n'avez pas expliqué pourquoi c'est là, je suggère de l'enlever.
Si vous voulez un motif async/wait, vous pouvez utiliser Task.Delay()
mais je vous conseillerais d'en lire plus sur async/wait avant de l'utiliser:
static async void Work3()
{
Console.WriteLine("5 started");
await Task.Delay(5000);
Console.WriteLine("5 completed");
}
Vous avez utilisé le mot clé 'async
' avec la méthode qui indique que les méthodes Work1 (), Work2 () et Work3 () sont exécutées de manière asynchrone, mais vous n'avez pas utilisé le mot clé 'waiting'. Pour l'exécuter de manière synchrone. Utilisez le mot clé 'await
' vous voulez l'exécuter de manière asynchrone.
static async void Work1()
{
Console.WriteLine("10 started");
await Task.Delay(10000);
Console.WriteLine("10 completed");
}
static async void Work2()
{
Console.WriteLine("3 started");
await Task.Delay(3000);
Console.WriteLine("3 completed");
}
static async void Work3()
{
Console.WriteLine("5 started");
await Task.Delay(5000);
Console.WriteLine("5 completed");
}
Vous avez désigné vos méthodes (Work1, Work2, Work3) par le mot clé async
, mais aucun de vos codes dans ces méthodes n'utilise l'opérateur await
pour appeler des appels asynchrones.