Foutafhandeling in asynchrone activiteiten

Het bieden van foutafhandeling in een AsyncCodeActivity omvat het routeren van de fout via het callbacksysteem van de activiteit. In dit onderwerp wordt beschreven hoe u een fout die gegenereerd wordt in een asynchrone bewerking terug naar de host kunt sturen, met behulp van het voorbeeld van de SendMail-activiteit.

Retourneert een fout die is opgetreden in een asynchrone activiteit terug naar de host

Het routeren van een fout in een asynchrone bewerking terug naar de host in het voorbeeld van sendMail-activiteit omvat de volgende stappen:

  • Voeg een uitzonderingseigenschap toe aan de SendMailAsyncResult klasse.

  • Kopieer de gegooide fout naar die eigenschap in de SendCompleted event handler.

  • Gooi de uitzondering in de EndExecute gebeurtenis-handler.

De resulterende code is als volgt.

class SendMailAsyncResult : IAsyncResult  
        {  
            …  
            public Exception Error { get; set; }
            …  
            void SendCompleted(object sender, AsyncCompletedEventArgs e)  
            {  
                Error = e.Error;  
                this.asyncWaitHandle.Set();  
                callback(this);  
            }  
         }  
  
    public sealed class SendMail: AsyncCodeActivity  
    {  
         …  
        protected override void EndExecute(AsyncCodeActivityContext context, IAsyncResult result)  
        {  
            SendMailAsyncResult sendMailResult = result as SendMailAsyncResult;  
            if (sendMailResult != null && sendMailResult.Error != null)  
                throw sendMailResult.Error;
        }  
    }