Trabajando con Pop3Client Asincrónicamente
Trabajar con mensajes también se puede realizar de manera asincrónica utilizando el Pop3Client de Aspose.Email. Este artículo muestra cómo recuperar mensajes de un buzón de manera asincrónica. También muestra cómo listar mensajes proporcionando criterios de búsqueda utilizando MailQuery. Se mostrará por separado cómo interrumpir una operación con un buzón iniciada por un método de patrón asincrónico basado en tareas (TAP).
Recuperar Mensajes Asincrónicamente
El siguiente fragmento de código muestra cómo recuperar mensajes de manera asincrónica.
Listar Mensajes Asincrónicamente con MailQuery
La clase MailQuery se puede utilizar para especificar criterios de búsqueda para recuperar una lista de mensajes de manera asincrónica, como se muestra en el siguiente ejemplo de código.
Cómo Interrumpir un Método TAP
A partir de .NET Framework 4.5, puede utilizar métodos asincrónicos implementados de acuerdo con el modelo TAP. El siguiente fragmento de código muestra cómo recibir información sobre un buzón utilizando el método de patrón asincrónico basado en tareas llamado GetMailboxInfoAsync
y luego interrumpir este proceso después de un tiempo.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
using (Pop3Client client = new Pop3Client(host, 995, senderEmail, password, SecurityOptions.Auto))
{
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
AutoResetEvent autoResetEvent = new AutoResetEvent(false);
Exception exception = null;
ThreadPool.QueueUserWorkItem(delegate
{
try
{
// start receiving mailbox information
var task = client.GetMailboxInfoAsync(cancellationTokenSource.Token);
Pop3MailboxInfo mailboxInfo = task.GetAwaiter().GetResult();
Console.WriteLine("Message count: " + mailboxInfo.MessageCount);
}
catch (Exception e)
{
exception = e;
}
finally
{
autoResetEvent.Set();
}
});
Thread.Sleep(2000);
// stop receiving mailbox information
cancellationTokenSource.Cancel();
autoResetEvent.WaitOne();
if (exception is OperationCanceledException)
Console.WriteLine("Operation has been interrupted: " + exception.Message);
}