2013-08-21 3 views
8

Ich bin dabei this tutorial, um E-Mails von meiner Azure-Web-Rolle mit SendGrid zu senden.Senden von E-Mails mit SendGrid auf Azure mithilfe von C# async, warten Sie auf

Dies ist der relevante Teil aus dem Tutorial:

// Create credentials, specifying your user name and password. 
var credentials = new NetworkCredential("username", "password"); 

// Create an REST transport for sending email. 
var transportREST = REST.GetInstance(credentials); 

// Send the email. 
transportREST.Deliver(myMessage); 

Es scheint mir, dass die transportREST.Deliver Funktion synchron ist. Da es IO ausführt, würde ich lieber das neue .NET 4.5 async verwenden, stattdessen auf warten (mein anderer Code ist komplett asynchron). Ist das möglich? Gibt es eine async API für SendGrid oder eine Möglichkeit, den vorhandenen Anruf zu umbrechen?

+1

verfügbar DeliverAsync ist „oder eine Möglichkeit, die bestehende Verbindung zu wickeln“ Sie können nicht synchrone Methode wickeln, um es asynchron. – svick

+0

@svick Ich weiß, aber wenn ich einen neuen Thread für das blockierende Bit und async darauf spawn, könnte dies ein wenig besser sein und mein Server-Thread-Pool, um andere Clients asynchron zu behandeln .. ist das besser als das Blockieren? oder vielleicht haben einige worker thread an das sende dieser blockieren e-mails und fügen sie zu seiner warteschlange. – talkol

+0

Nein, eigentlich wird das nicht helfen. Threads sind relativ schwergewichtig und das Erstellen eines Threads nur für diese eine Operation wird wahrscheinlich Ihre Leistung verschlechtern. Es ist nicht besser danke Blockieren, weil es blockiert. – svick

Antwort

3

Derzeit verfügt die SendGrid C# -Bibliothek nicht über asynchrone Methoden, da wir die Kompatibilität mit .NET 4.0 beibehalten möchten.

Sie könnten diese Änderung leicht selbst vornehmen. In der Tat, here's a commit, dass ich später zurückkehrte, nachdem wir beschlossen, bei .NET 4.0 zu bleiben.

Update: Ab 24. Oktober 2013 und sendgrid-csharp 1.2.1 gibt es ein Verfahren

+1

Es könnte eine gute Idee sein, beide Versionen zu unterstützen (möglicherweise in der gleichen Quelle mit einer bedingten Attribut-Magie). Alle Cloud-API macht diesen Übergang (Azure Storage neue RC ist bereits async) – talkol

+0

eine andere kleine Anfrage: Bitte verwenden Sie die XxxAsync Namenskonvention in den asynchronen Versionen – talkol

+3

Paar von Kommentaren auf das Commit, mit dem Sie verbunden sind: 1. Ihre 'async' Methoden zurückgeben void (sie sollten 'Task' zurückgeben), also wären sie nicht so nützlich (du könntest sie nicht" erwarten "). 2. Sie können die Kompatibilität mit .NET 4.0 beibehalten, indem Sie diese Methoden 'Task's und in der Methode' 'ContinueWith' anstelle von' await' zurückgeben lassen (im Commit sieht es nicht so aus, als wäre es sehr schwierig, dies zu tun) Verwenden Sie "ContinueWith" vs "erwarten". –

Verwandte Themen