Asynkron e‑posthantering med POP3‑klient

Asynkrona operationer med Pop3Client

Arbete med meddelanden kan också utföras asynkront med hjälp av Aspose.Email Pop3Client. Denna artikel visar hur man hämtar meddelanden från en brevlåda asynkront. Den visar också hur man listar meddelanden genom att ange sökkriterier med hjälp av MailQuery. Det kommer att visas separat hur man avbryter en operation med en brevlåda som startats av ett uppgiftsbaserat asynkront mönster (TAP) metod.

Hämta meddelanden asynkront

Följande kodsnutt visar hur man hämtar meddelanden asynkront.

Lista meddelanden asynkront med MailQuery

Den MailQuery klass kan användas för att specificera sökkriterier för att asynkront hämta en lista med meddelanden, som visas i följande kodexempel.

Avbryta en TAP-metod

Från och med .NET Framework 4.5 kan du använda asynkrona metoder implementerade enligt TAP-modellen. Kodsnutten nedan visar hur du tar emot information om en brevlåda med task-baserade asynkrona mönstermetoden som heter GetMailboxInfoAsync och avbryt sedan processen efter ett tag.

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