À l'aide asynchrone sans attendre
Je voudrais faire une fonction asynchrone, donc j'ai simplement ajouter async
comme ceci:
public async static void something(){
}
Vous pouvez voir que son retour est void
. Je veux juste que cette fonction soit appelée de façon asynchrone sans blocage, puisque le rendement est void
donc pas de await
est nécessaire.
Mais Visual Studio 2012 juste ne peut pas compiler ce, il dit que je manque await
?
Pourriez-vous nous conseiller un exemple qui rend une fonction async
sans l'aide de await
.
- Encore plus intéressant, c'est Méthodes asynchrones correct? Resharper avertissement quand Resharper questions d'avertissement sur
async
méthode ayantawait
dans son corps - dans cette question Resharper est de se plaindre des deux méthodes qui n'ont pas les attendent dans leur, pas la principale méthode qui a de l'attendent.
Vous devez vous connecter pour publier un commentaire.
Je pense que peut-être vous ne comprenez pas ce que
async
n'. L'avertissement est tout à fait exact: si vous marquez votre méthodeasync
mais ne pas utiliser deawait
n'importe où, alors votre méthode de ne pas être asynchrone. Si vous l'appelez, tout le code à l'intérieur de la méthode execute en mode synchrone.Aussi, vous devriez essayer d'éviter d'utiliser
async void
méthodes, ils font de la gestion des exceptions difficile.async
faire de la méthode elle-même asynchrone ou pas lorsque la méthode appelée, si aucuneawait
n'importe où à l'intérieur de la méthode? Comme l'exemple ci-dessus, si je l'appellesomething()
, il va bloquer le thread en cours?something()
(et pasawait
), puis il va bloquer le fil. C'est ce que l'avertissement essaie de vous dire.something()
bloquer le thread en cours, je devrais mettreasync
dans la méthode actuelle et de l'utilisationsomething()
(qui ne va pas bloquer) droit?async
n'est pas quelque chose qui fera de vos méthodes comme par magie sans le bloquer. Si vous souhaitez exécuter du code sur un autre thread, utilisezTask.Run()
.await
va le transformer en un simple appel de fonction? Je ne veux pas attendre pour cela, j'ai juste envie de courir et de faire sa chose et mourir quand il est terminé.Task.Run()
pour l'exécuter sur un autre thread.