Uso de operaciones asíncronas en EWSClient
A diferencia de los métodos síncronos, los métodos asíncronos son no bloqueantes y permiten realizar múltiples solicitudes simultáneamente. Los métodos asíncronos se nombran con el sufijo Async.
NOTA: Los métodos Async están disponibles en versiones que apunten a .NET Core, .NET Framework 4.5 y posteriores.
Implementando IAsyncTokenProvider para obtener tokens OAuth de forma asíncrona
El siguiente ejemplo de código define una clase SomeAsyncTokenProvider
, que implementa la interfaz IAsyncTokenProvider. La clase implementa el método asíncrono GetAccessTokenAsync que devuelve un Task de tipo OAuthToken. Este método obtiene un OAuthToken válido de forma asíncrona.
private class SomeAsyncTokenProvider : IAsyncTokenProvider
{
public SomeAsyncTokenProvider( /*algunos parámetros*/)
{
...
}
public async Task<OAuthToken> GetAccessTokenAsync(bool ignoreExistingToken = false,
CancellationToken cancellationToken = default)
{
//Algún código asíncrono para obtener un OAuthToken válido
...
}
public void Dispose()
{
...
}
}
Creando la instancia IAsyncEwsClientInstance
El siguiente ejemplo de código obtiene un cliente de Exchange Web Services (EWS) de forma asíncrona utilizando autenticación OAuth. El código realiza los siguientes pasos:
- Crea un nuevo objeto CancellationToken que puede usarse para cancelar operaciones asíncronas.
- Instancia la clase
SomeAsyncTokenProvider
que implementa la interfaz IAsyncTokenProvider. Esta clase se utiliza como un parámetro para construir un nuevo objeto OAuthNetworkCredential. - Establece la URI del buzón en el extremo de Exchange Web Services.
- Llama al método GetEwsClientAsync de la clase EWSClient con la
mailboxUri
y el objetoOAuthNetworkCredential
como parámetros. Este método devuelve un objeto Task, por lo que espera el resultado antes de continuar. El objetocancellationToken
se pasa como un parámetro opcional al método GetEwsClientAsync.
//El cancellationToken puede ser usado
var cancellationToken = new CancellationToken();
//Crear IAsyncEwsClientInstance
IAsyncTokenProvider tokenProvider = new SomeAsyncTokenProvider(/*algunos parámetros*/);
const string mailboxUri = "https://outlook.office365.com/ews/exchange.asmx";
var ewsClient = await EWSClient.GetEwsClientAsync(mailboxUri, new OAuthNetworkCredential(tokenProvider),
cancellationToken: cancellationToken);
Enviando un mensaje
El siguiente ejemplo de código intenta enviar un mensaje de correo electrónico de forma asíncrona. El código realiza los siguientes pasos:
- Crea un nuevo objeto MailMessage con los parámetros del mensaje.
- Llama al método SendAsync del objeto EWSClient, pasando el MailMessage como parámetro. El método se espera ya que devuelve un objeto Task. El objeto
cancellationToken
se pasa como un parámetro opcional al método SendAsync.
MailMessage message = new MailMessage("from@aspose.com", "to@aspose.com", "Algun asunto", "Algun cuerpo");
await ewsClient.SendAsync(message, cancellationToken: cancellationToken);
Recuperando un mensaje con archivos adjuntos
Para recuperar un mensaje de correo electrónico de manera asíncrona, utiliza el siguiente ejemplo de código con los pasos descritos a continuación:
-
Llama al método FetchItemAsync de un EWSclient. El método toma dos parámetros:
messageUri
es una cadena que representa la URI del mensaje a recuperarcancellationToken
es un parámetro opcional que se puede utilizar para cancelar la operación asíncrona. El método devuelve un objeto Task que se resuelve en un objeto MapiMessage cuando la operación asíncrona se completa. La palabra clave “await” se utiliza para esperar que el objeto Task complete antes de proceder.
-
Asigna a la variable
fetched
el resultado de la tarea completada, que es un objeto MapiMessage que contiene los datos del mensaje recuperado.var fetched = await ewsClient.FetchItemAsync(messageUri, cancellationToken: cancellationToken);
Agregando mensajes
El siguiente ejemplo de código intenta agregar mensajes de correo electrónico de forma asíncrona. El código realiza los siguientes pasos:
-
Llama al método AppendMessagesAsync del objeto EWSclient. El método toma un objeto EwsAppendMessage que contiene parámetros: los mensajes a agregar, la URI de la carpeta de destino y el token de cancelación.
-
Crea el objeto EwsAppendMessage utilizando el método Create y lo configura con las siguientes llamadas de método:
- AddMessage agrega un mensaje a la operación de agregar.
- SetFolder establece la URI de la carpeta de destino para la operación de agregar.
- SetCancellationToken establece el token de cancelación que se puede utilizar para cancelar la operación asíncrona.
-
El método AppendMessagesAsync devuelve un objeto Task que se resuelve en un objeto IEnumerable
cuando la operación asíncrona se completa. La palabra clave “await” se usa para esperar que el objeto Task complete antes de continuar. -
La variable
uris
se asigna al resultado de la tarea completada, que es un objeto IEnumerableque contiene las URIs de los mensajes agregados.
IEnumerable<string> uris = await ewsClient.AppendMessagesAsync(
EwsAppendMessage.Create()
.AddMessage(message)
.AddMessage(fetched)
.SetFolder(folderUri)
.SetCancellationToken(cancellationToken));
Copiando elementos
El siguiente ejemplo de código muestra cómo copiar elementos y realiza los siguientes pasos:
-
Llama al método CopyItemAsync del objeto EWSClient. El método toma tres parámetros:
messageUri
es una cadena que representa la URI del mensaje a copiardestinationFolderUri
es una cadena que representa la URI de la carpeta de destinocancellationToken
es un parámetro opcional que se puede utilizar para cancelar la operación asíncrona.
El método devuelve un objeto Task que se resuelve en una cadena cuando la operación asíncrona se completa. La palabra clave “await” se usa para esperar que el objeto Task complete antes de continuar.
-
La variable
newItemUri
se asigna al resultado de la tarea completada, que es una cadena que contiene la URI de la copia recién creada del mensaje.
string newItemUri = await ewsClient.CopyItemAsync(messageUri, destinationFolderUri, cancellationToken);
Eliminando elementos
El siguiente código intenta eliminar un mensaje de correo electrónico de forma asíncrona.
Llama al método DeleteItemAsync del objeto EWSClient. El método toma tres parámetros:
newItemUri
es una cadena que representa la URI del elemento a eliminarDeletionOptions.DeletePermanently
especifica que el elemento debe eliminarse permanentementecancellationToken
es un parámetro opcional que se puede utilizar para cancelar la operación asíncrona.
El método devuelve un objeto Task que se completa cuando la operación asíncrona se completa. La palabra clave “await” se usa para esperar que el objeto Task complete antes de continuar.
await ewsClient.DeleteItemAsync(newItemUri, DeletionOptions.DeletePermanently, cancellationToken);
Eliminando carpetas
El siguiente código intenta eliminar una carpeta de forma asíncrona.
Llama al método DeleteFolderAsync del objeto EWSClient. El método toma tres parámetros:
folderUri
es una cadena que representa la URI de la carpeta a eliminardeletePermanently
especifica si se debe eliminar la carpeta permanentemente o moverla a la carpeta “Elementos Eliminados”cancellationToken
es un parámetro opcional que se puede utilizar para cancelar la operación asíncrona.
El método devuelve un objeto Task que se completa cuando la operación asíncrona se completa. La palabra clave “await” se usa para esperar que el objeto Task complete antes de continuar.
const bool deletePermanently = true;
await ewsClient.DeleteFolderAsync(folderUri, deletePermanently, cancellationToken);
Actualizando elementos
El siguiente ejemplo de código intenta actualizar un elemento de forma asíncrona. Realiza los siguientes pasos:
- Crea un objeto EwsUpdateItem utilizando el método Create, pasando un objeto de elemento. El EwsUpdateItem representa los parámetros de la operación de actualización. Se llama al método SetCancellationToken en el objeto EwsUpdateItem, pasando el parámetro
cancellationToken
, que es un parámetro opcional que se puede usar para cancelar la operación asíncrona. - Pasa el objeto EwsUpdateItem como un parámetro al método UpdateItemAsync de un EWSClient.
- El método UpdateItemAsync devuelve un objeto Task que se completa cuando la operación asíncrona se completa. La palabra clave “await” se usa para esperar que el objeto Task complete antes de continuar.
await ewsClient.UpdateItemAsync(
EwsUpdateItem.Create(mapiNote)
.SetCancellationToken(cancellationToken));