Работа с Pop3Client Асинхронно

Работа с сообщениями также может выполняться асинхронно с использованием Aspose.Email Pop3Client. В этой статье показано, как асинхронно извлекать сообщения из почтового ящика. Также показано, как перечислять сообщения, предоставив критерии поиска с помощью MailQuery. Отдельно будет показано, как прервать операцию с почтовым ящиком, запущенную с помощью метода асинхронной модели на основе задач (TAP).

Асинхронное извлечение сообщений

Следующий фрагмент кода показывает, как асинхронно извлекать сообщения.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
Pop3Client client = new Pop3Client();
client.Host = "pop.gmail.com";
client.Port = 995;
client.SecurityOptions = SecurityOptions.SSLImplicit;
client.Username = "username";
client.Password = "password";
try
{
Pop3MessageInfoCollection messages = client.ListMessages();
Console.WriteLine("Total Number of Messages in inbox:" + messages.Count);
AutoResetEvent evnt = new AutoResetEvent(false);
MailMessage message = null;
AsyncCallback callback = delegate(IAsyncResult ar)
{
message = client.EndFetchMessage(ar);
evnt.Set();
};
client.BeginFetchMessage(messages[0].SequenceNumber, callback, null);
evnt.WaitOne();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}

Асинхронный список сообщений с MailQuery

Класс MailQuery может использоваться для указания критериев поиска для асинхронного извлечения списка сообщений, как показано в следующем примере кода.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
MailQueryBuilder builder = new MailQueryBuilder();
builder.Subject.Contains("Subject");
MailQuery query = builder.GetQuery();
IAsyncResult asyncResult = client.BeginListMessages(query);
Pop3MessageInfoCollection messages = client.EndListMessages(asyncResult);

Как прервать метод TAP

Начиная с .NET Framework 4.5, вы можете использовать асинхронные методы, реализованные в соответствии с моделью TAP. Ниже представлен фрагмент кода, который показывает, как получить информацию о почтовом ящике с помощью метода асинхронной модели на основе задач с именем GetMailboxInfoAsync, а затем прервать этот процесс через некоторое время.

// Для полных примеров и файлов данных, пожалуйста, перейдите на 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
        {
            // начинаем получать информацию о почтовом ящике
            var task = client.GetMailboxInfoAsync(cancellationTokenSource.Token);
            Pop3MailboxInfo mailboxInfo = task.GetAwaiter().GetResult();
            Console.WriteLine("Количество сообщений: " + mailboxInfo.MessageCount);
        }
        catch (Exception e)
        {
            exception = e;
        }
        finally
        {
            autoResetEvent.Set();
        }
    });

    Thread.Sleep(2000);

    // останавливаем получение информации о почтовом ящике
    cancellationTokenSource.Cancel();
    autoResetEvent.WaitOne();

    if (exception is OperationCanceledException)
        Console.WriteLine("Операция была прервана: " + exception.Message);
}