การจัดการอีเมลแบบอะซิงโครนัสด้วย POP3 Client

การดำเนินการแบบอะซิงโครนัสกับ Pop3Client

การทำงานกับข้อความสามารถทำแบบอะซิงโครนัสโดยใช้ Aspose.Email Pop3Client. บทความนี้แสดงวิธีดึงข้อความจากกล่องเมลแบบอะซิงโครนัส รวมถึงการลิสต์ข้อความโดยระบุเงื่อนไขการค้นหาโดยใช้ MailQuery. จะอธิบายแยกต่างหากว่าจะแบ่งการทำงานที่เริ่มจากกล่องจดหมายโดยใช้รูปแบบอะซิงโครนัสแบบงาน (TAP) เมธอด.

ดึงข้อความแบบอะซิงโครนัส

โค้ดตัวอย่างต่อไปนี้แสดงวิธีการดึงข้อความแบบอะซิงโครนัส.

List Messages Asynchronously with MailQuery

นี้ MailQuery class สามารถใช้เพื่อกำหนดเงื่อนไขการค้นหาเพื่อดึงรายการข้อความแบบอะซิงโครนัสตามที่แสดงในตัวอย่างโค้ดต่อไปนี้

การขัดจังหวะเมธอด 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);
}