Felhantering i asynkrona aktiviteter

Om du anger felhantering i en AsyncCodeActivity innebär det att du dirigerar felet via aktivitetens återanropssystem. Det här avsnittet beskriver hur du hämtar ett fel som genereras i en asynkron åtgärd tillbaka till värden, med hjälp av SendMail-aktivitetsprovet.

Returnera ett fel som genereras i en asynkron aktivitet tillbaka till värden

Routning av ett fel i en asynkron operation tillbaka till värden i SendMail-aktivitetsexemplet omfattar följande steg:

  • Lägg till en undantagsegenskap i SendMailAsyncResult klassen.

  • Kopiera det utslängda felet till den egenskapen i SendCompleted händelsehanteraren.

  • Utlöser undantaget i EndExecute händelsehanteraren.

Den resulterande koden är följande.

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;
        }  
    }