Асинхронна обробка листів з POP3 клієнтом

Асинхронні операції з Pop3Client

Робота з повідомленнями також може виконуватись асинхронно за допомогою Aspose.Email Pop3Client. Ця стаття показує, як отримати повідомлення з поштової скриньки асинхронно. Вона також показує, як перелистувати повідомлення, надаючи критерії пошуку за допомогою MailQuery. Показано окремо, як перервати операцію з поштовою скринькою, запущеноїTAP) метод.

Отримання повідомлень асинхронно

Нижче наведений фрагмент коду показує, як отримати повідомлення асинхронно.

Список повідомлень асинхронно за допомогою MailQuery

The MailQuery клас можна використати для вказання критеріїв пошуку при асинхронному отриманні списку повідомлень, як показано у наведеному зразку коду.

Переривання TAP‑методу

Починаючи з .NET Framework 4.5, ви можете використовувати асинхронні методи, реалізовані згідно моделі TAP. Наведений нижче фрагмент коду показує, як отримати інформацію про поштову скриньку за допомогою методу на базі завдань (task-based asynchronous pattern) під назвою 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);
}