Errore durante la gestione delle attività asincroneError handling in asynchronous activities

Fornire la gestione degli errori in AsyncCodeActivity implica risolvere gli errori tramite il sistema di callback dell'attività.Providing error handling in an AsyncCodeActivity involves routing the error through the activity’s callback system. In questo argomento viene descritto come restituire un errore generato in un'unica operazione asincrona all'host, usando come esempio l'attività SendMail.This topic describes how to get an error that is thrown in an asynchronous operation back to the host, using the SendMail activity sample.

Restituisce un errore generato in un'attività asincrona all'hostReturning an error thrown in an asynchronous activity back to the host

La restituzione all'host di un errore in un'operazione asincrona nell'esempio di attività SendMail include i passaggi seguenti:Routing an error in an asynchronous operation back to the host in the SendMail activity sample involves the following steps:

  • Aggiungere una proprietà Exception alla classe SendMailAsyncResult.Add an Exception property to the SendMailAsyncResult class.

  • Copiare l'errore generato a tale proprietà nel gestore eventi SendCompleted.Copy the thrown error to that property in the SendCompleted event handler.

  • Generare l'eccezione nel gestore eventi EndExecute.Throw the exception in the EndExecute event handler.

Di seguito è riportato il codice risultante.The resulting code is as follows.

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