2013-08-21 63 views
8

Tôi đang theo dõi this tutorial để gửi email từ vai trò web Azure của tôi bằng SendGrid.Gửi email bằng SendGrid trên Azure bằng cách sử dụng đồng bộ hóa C#, đang chờ

Đây là phần có liên quan từ hướng dẫn:

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

Dường như với tôi rằng transportREST.Deliver chức năng là đồng bộ. Kể từ khi nó thực hiện IO tôi muốn sử dụng mới NET 4.5 async, chờ đợi thay vào đó (tất cả các mã khác của tôi là hoàn toàn không đồng bộ). Điều này có thể không? Có một API async cho SendGrid hoặc một số cách để bọc cuộc gọi hiện tại?

+1

“hoặc một số cách để quấn gọi hiện” Bạn không thể quấn phương pháp đồng bộ để làm cho nó không đồng bộ. – svick

+0

@svick Tôi biết, nhưng nếu tôi sinh ra một luồng mới cho bit chặn và async trên nó, điều này có thể tốt hơn một chút và miễn phí máy chủ thread-pool của tôi để xử lý các máy khách khác không đồng bộ .. điều này có tốt hơn là chặn không? hoặc có thể có một số chuỗi công việc làm việc về việc gửi các email chặn này và thêm vào hàng đợi của nó .. – talkol

+0

Không, thực sự điều đó sẽ không giúp ích gì. Các chủ đề có trọng lượng tương đối nặng và tạo một luồng chỉ cho thao tác này có khả năng sẽ làm cho hiệu suất của bạn tồi tệ hơn. Nó không phải là tốt hơn cảm ơn chặn, bởi vì nó * là * chặn. – svick

Trả lời

3

Hiện tại thư viện SendGrid C# không có các phương thức không đồng bộ vì chúng tôi muốn duy trì khả năng tương thích với .NET 4.0.

Bạn có thể tự mình thực hiện thay đổi này. Trong thực tế, here's a commit mà sau này tôi đã hoàn nguyên sau khi chúng tôi quyết định gắn bó với .NET 4.0.

Cập nhật: Tính đến ngày 24 Tháng 10 năm 2013 và sendgrid-CSharp 1.2.1, có một phương pháp DeliverAsync sẵn

+1

Có thể là một ý tưởng tốt để hỗ trợ cả hai phiên bản (có thể trong cùng một nguồn với một số phép thuật thuộc tính có điều kiện). Tất cả api trên đám mây đang thực hiện chuyển đổi này (yêu cầu Azure Storage mới RC không đồng bộ) – talkol

+0

một yêu cầu nhỏ khác: vui lòng sử dụng quy ước đặt tên xxxAsync trong các phiên bản async – talkol

+3

Nhận xét về cam kết mà bạn đã liên kết với: void (chúng sẽ trả về 'Task'), vì vậy chúng sẽ không hữu ích (bạn không thể" chờ đợi chúng "). 2. bạn có thể duy trì tính tương thích với .NET 4.0 bằng cách có các phương thức này trả về 'Task' và trong phương thức sử dụng '.ContinueWith' thay vì' await' (trong cam kết, có vẻ như nó sẽ rất khó để sử dụng '.ContinueWith' vs' await' –