Асинхронная обработка электронной почты с 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);
}