Xử lý Email Bất đồng bộ với POP3 Client

Các hoạt động bất đồng bộ với Pop3Client

Làm việc với tin nhắn cũng có thể thực hiện bất đồng bộ bằng cách sử dụng Aspose.Email Pop3Client. Bài viết này trình bày cách lấy tin nhắn từ hộp thư một cách bất đồng bộ. Nó cũng chỉ ra cách liệt kê tin nhắn bằng cách cung cấp tiêu chí tìm kiếm sử dụng MailQuery. Sẽ được trình bày riêng cách ngắt một thao tác với hộp thư được khởi động bằng mô hình bất đồng bộ dựa trên tác vụ (TAP) phương thức.

Truy xuất Tin nhắn bất đồng bộ

Đoạn mã sau cho bạn thấy cách truy xuất tin nhắn một cách bất đồng bộ.

Liệt kê Tin nhắn Bất đồng bộ với MailQuery

Cái MailQuery lớp có thể được sử dụng để chỉ định tiêu chí tìm kiếm nhằm lấy danh sách tin nhắn bất đồng bộ như trong đoạn mã mẫu dưới đây.

Ngắt một phương thức TAP

Bắt đầu từ .NET Framework 4.5, bạn có thể sử dụng các phương thức bất đồng bộ được triển khai theo mô hình TAP. Đoạn mã dưới đây cho thấy cách nhận thông tin về hộp thư bằng phương thức dựa trên mẫu bất đồng bộ (task-based asynchronous pattern) có tên GetMailboxInfoAsync và sau đó ngắt quá trình này sau một thời gian.

// 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);
}