par rapport directement à la tâche: return await
L'importance dans await
blocks using
est égale à l'utilisation de return await
, il existe des différences subtiles mais importantes entre les deux lors de l'utilisation de la méthode d'emballage de bloc using
.
Compte tenu des deux mêmes méthodes suivantes:
<code class="language-csharp">Task<TResult> DoSomethingAsync() { using (var foo = new Foo()) { return foo.DoAnotherThingAsync(); } } async Task<TResult> DoSomethingAsync() { using (var foo = new Foo()) { return await foo.DoAnotherThingAsync(); } }</code>
Dans la première méthode, lors du retour à la tâche directement, le bloc using
libérera immédiatement l'objet DoAnotherThingAsync
à la méthode Foo
pour renvoyer le code de contrôle et libérer immédiatement l'objet DoAnotherThingAsync
. Cependant, la méthode peut ne pas être terminée, ce qui peut entraîner des erreurs potentielles.
Au contraire, lorsque vous utilisez return await
, le flux de contrôle attendra avant l'exécution continue. Cela garantit que les blocs sont libérés uniquement après que l'opération asynchrone soit entièrement exécutée. Par conséquent, la deuxième méthode fonctionnera normalement et la première méthode peut être libérée. DoAnotherThingAsync
using
Foo
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!