Uso de operaciones asincrónicas en EWSClient

A diferencia de los métodos sincrónicos, los métodos asíncronos no bloquean y permiten realizar varias solicitudes simultáneamente. Los métodos asincrónicos se nombran con el sufijo asíncrono.

NOTE: Los métodos asíncronos están disponibles en las versiones orientadas a .NET Core, .NET Framework 4.5 y versiones posteriores.

Implementación de IAsyncTokenProvider para obtener tokens de OAuth de forma asíncrona

El siguiente ejemplo de código define un SomeAsyncTokenProvider clase, que implementa la IAsyncTokenProvider interfaz. La clase implementa GetAccessTokenAsync método asincrónico que devuelve una tarea de tipo OAuthToken. Este método obtiene un valor válido OAuthToken asynchronously.

private class SomeAsyncTokenProvider : IAsyncTokenProvider
{
    public SomeAsyncTokenProvider( /*some parameters*/)
    {
        ...
    }

    public async Task<OAuthToken> GetAccessTokenAsync(bool ignoreExistingToken = false,
        CancellationToken cancellationToken = default)
    {
        //Some asynchronous code to get a valid OAuthToken
        ...
    }

    public void Dispose()
    {
        ...
    }
}

Creación de la instancia de IAsyncEWSClientInstance

El siguiente ejemplo de código obtiene un cliente de Exchange Web Services (EWS) de forma asincrónica mediante la autenticación OAuth. El código lleva a cabo los siguientes pasos:

  1. Crea un nuevo CancellationToken objeto que se puede usar para cancelar operaciones asincrónicas.
  2. Instantiates SomeAsyncTokenProvider clase que implementa el IAsyncTokenProvider interfaz. Esta clase se usa como parámetro para construir una nueva OAuthNetworkCredential object.
  3. Establece el URI del buzón en el punto final de los servicios web de Exchange.
  4. Llama al GetEwsClientAsync método del EWSClient clase con el mailboxUri and OAuthNetworkCredential objeto como parámetros. Este método devuelve un objeto Task, por lo que espera el resultado antes de continuar. El cancellationToken el objeto se pasa como parámetro opcional al GetEwsClientAsync method.
//The cancellationToken can be used
var cancellationToken = new CancellationToken();

//Create IAsyncEwsClientInstance
IAsyncTokenProvider tokenProvider = new SomeAsyncTokenProvider(/*some parameters*/);
const string mailboxUri = "https://outlook.office365.com/ews/exchange.asmx";
var ewsClient = await EWSClient.GetEwsClientAsync(mailboxUri, new OAuthNetworkCredential(tokenProvider),
    cancellationToken: cancellationToken);

Enviar un mensaje

El ejemplo de código siguiente intenta enviar un mensaje de correo electrónico de forma asincrónica. El código lleva a cabo los siguientes pasos:

  1. Crea un nuevo MailMessage objeto con los parámetros del mensaje.
  2. Llama al SendAsync método del EWSClient objeto, pasando el MailMessage como parámetro. El método está en espera porque devuelve un objeto Task. El cancellationToken el objeto se pasa como parámetro opcional al SendAsync method.
MailMessage message = new MailMessage("from@aspose.com", "to@aspose.com", "Some subject", "Some body");
await ewsClient.SendAsync(message, cancellationToken: cancellationToken);

Obtención de un mensaje con archivos adjuntos

Para recuperar un mensaje de correo electrónico de forma asincrónica, utilice el siguiente ejemplo de código con los pasos que se describen a continuación:

  1. Llame al FetchItemAsync método de un EWSClient. El método toma dos parámetros:

    • messageUri es una cadena que representa el URI del mensaje que se va a buscar
    • cancellationToken es un parámetro opcional que se puede usar para cancelar la operación asincrónica. El método devuelve un objeto de tarea que se resuelve en MapiMessage objeto cuando se complete la operación asincrónica. La palabra clave «await» se usa para esperar a que finalice el objeto de la tarea antes de continuar.
  2. Asignar a fetched variable el resultado de la tarea completada, que es una MapiMessage objeto que contiene los datos del mensaje obtenido.

       var fetched = await ewsClient.FetchItemAsync(messageUri, cancellationToken: cancellationToken);
    

Agregar mensajes

El ejemplo de código siguiente intenta anexar mensajes de correo electrónico de forma asincrónica. El código lleva a cabo los siguientes pasos:

  1. Llama al AppendMessagesAsync método de un EWSclient objeto. El método requiere un EwsAppendMessage objeto que contiene parámetros: los mensajes que se van a añadir, el URI de la carpeta de destino y el token de cancelación.

  2. Crea el EwsAppendMessage objeto que usa el Create método y lo configura con las siguientes llamadas a métodos:

    • AddMessage añade un mensaje a la operación de anexión.
    • SetFolder establece el URI de la carpeta de destino para la operación de anexión.
    • SetCancellationToken establece el token de cancelación que se puede usar para cancelar la operación asincrónica.
  3. The AppendMessagesAsync el método devuelve un objeto Task que se resuelve en un IEnumerable objeto cuando se complete la operación asincrónica. La palabra clave «await» se usa para esperar a que finalice el objeto de la tarea antes de continuar.

  4. The uris a la variable se le asigna el resultado de la tarea completada, que es un IEnumerable objeto que contiene los URI de los mensajes adjuntos.

IEnumerable<string> uris = await ewsClient.AppendMessagesAsync(
    EwsAppendMessage.Create()
        .AddMessage(message)
        .AddMessage(fetched)
        .SetFolder(folderUri)
        .SetCancellationToken(cancellationToken));

Copiar elementos

En el ejemplo de código que aparece a continuación se muestra cómo copiar elementos y se llevan a cabo los pasos siguientes:

  1. Llama al CopyItemAsync método de un EWSClient objeto. El método toma tres parámetros:

    • messageUri es una cadena que representa el URI del mensaje que se va a copiar
    • destinationFolderUri es una cadena que representa el URI de la carpeta de destino
    • cancellationToken es un parámetro opcional que se puede usar para cancelar la operación asincrónica.

    El método devuelve un objeto Task que se resuelve en una cadena cuando se completa la operación asincrónica. La palabra clave «await» se usa para esperar a que finalice el objeto Task antes de continuar.

  2. newItemUri a la variable se le asigna el resultado de la tarea completada, que es una cadena que contiene el URI de la copia recién creada del mensaje.

string newItemUri = await ewsClient.CopyItemAsync(messageUri, destinationFolderUri, cancellationToken);

Eliminar elementos

El siguiente código intenta eliminar un mensaje de correo electrónico de forma asincrónica.

Llama al DeleteItemAsync método de un objeto EWSClient. El método toma tres parámetros:

  • newItemUri es una cadena que representa el URI del elemento que se va a eliminar
  • DeletionOptions.DeletePermanently especifica que el elemento se debe eliminar de forma permanente
  • cancellationToken es un parámetro opcional que se puede usar para cancelar la operación asincrónica.

El método devuelve un objeto Task que finaliza cuando finaliza la operación asincrónica. La palabra clave «await» se usa para esperar a que se complete el objeto de tarea antes de continuar.

await ewsClient.DeleteItemAsync(newItemUri, DeletionOptions.DeletePermanently, cancellationToken);

Eliminar carpetas

El siguiente código intenta eliminar una carpeta de forma asincrónica.

Llama al DeleteFolderAsync método de un objeto EWSClient. El método toma tres parámetros:

  • folderUri es una cadena que representa el URI de la carpeta que se va a eliminar
  • deletePermanently especifica si se debe eliminar la carpeta de forma permanente o moverla a la carpeta «Elementos eliminados»
  • cancellationToken es un parámetro opcional que se puede usar para cancelar la operación asincrónica.

El método devuelve un objeto Task que finaliza cuando finaliza la operación asincrónica. La palabra clave «await» se usa para esperar a que se complete el objeto de tarea antes de continuar.

const bool deletePermanently = true;
await ewsClient.DeleteFolderAsync(folderUri, deletePermanently, cancellationToken);

Actualización de elementos

El ejemplo de código siguiente intenta actualizar un artículo de forma asincrónica. Realiza los siguientes pasos:

  1. Crea un EwsUpdateItem objeto que usa el Create método, pasando un objeto de elemento. El ewsUpdateItem representa los parámetros de una operación de actualización. El SetCancellationToken el método se invoca en el EwsUpdateItem objeto, pasando por el cancellationToken parámetro, que es un parámetro opcional que se puede usar para cancelar la operación asincrónica.
  2. Pasa el EwsUpdateItem objeto como parámetro del UpdateItemAsync método de un EWSClient.
  3. The UpdateItemAsync el método devuelve un objeto Task que finaliza cuando finaliza la operación asincrónica. La palabra clave «await» se usa para esperar a que se complete el objeto de tarea antes de continuar.
await ewsClient.UpdateItemAsync(
    EwsUpdateItem.Create(mapiNote)
        .SetCancellationToken(cancellationToken));