Асинхронно обработване на имейли с POP3 клиент
Асинхронни операции с Pop3Client
Работата със съобщения може също да се изпълни асинхронно, използвайки Aspose.Email Pop3Client. Тази статия показва как да се извлекат съобщения от пощенска кутия асинхронно. Тя също така показва как да се изброят съобщения, като се предоставят критерии за търсене, използвайки MailQuery. Ще бъде показано отделно как да прекъснете операция с пощенска кутия, стартирана чрез асинхронен шаблон, базиран на задачи (TAP) метод.
Извличане на съобщения асинхронно
Следният кодов фрагмент показва как да се извличат съобщения асинхронно.
Списък със съобщения асинхронно с MailQuery
Този MailQuery класът може да се използва за задаване на критерии за търсене при извличане на списък със съобщения асинхронно, както е показано в следния пример с код.
Прекъсване на TAP метод
Започвайки от .NET Framework 4.5, можете да използвате асинхронни методи, реализирани според модела TAP. Следният кодов фрагмент показва как да получите информация за пощенска кутия, използвайки метода, базиран на задача‑асинхронен модел, наречен GetMailboxInfoAsync и след това прекъснете този процес след известно време.
// 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);
}