Gestion des exceptions dans les méthodes void asynchrones
Dans le CTP .NET Async de Microsoft, les méthodes asynchrones se comportent différemment lors du lancement d'exceptions. Dans une méthode Task asynchrone ou une méthode Task
Attraper l'exception
Pour intercepter une exception levée par une méthode void asynchrone, vous devez explicitement attendre l'appel de la méthode ou utiliser la méthode Wait() :
En attente d'appel de méthode :
<code class="language-csharp"> public async Task Foo() { var x = await DoSomethingAsync(); } public async void DoFoo() { try { await Foo(); } catch (ProtocolException ex) { // 由于在异步方法中等待了调用,因此将捕获异常。 } }</code>
Utiliser la méthode Wait() :
<code class="language-csharp"> public void DoFoo() { try { Foo().Wait(); } catch (ProtocolException ex) { // 由于等待了调用的完成,因此将捕获异常。 } }</code>
Sémantique de gestion des erreurs
Comme Stephen Cleary l'a souligné, les méthodes void asynchrones ont une sémantique de gestion des erreurs différente :
"Lorsqu'une méthode void asynchrone lève une exception, l'exception est déclenchée directement sur le SynchronizationContext qui était actif lorsque la méthode void asynchrone a été démarrée
."
Autres consignes
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!