2017-05-10 10 views
5

Nếu tôi làm điều này:Cách chờ MailMessage.SendAsync?

public async Task<SendEmailServiceResponse> ExecuteAsync(SendEmailServiceRequest request) 
    { 
     .... 
     var response = new SendEmailServiceResponse(); 
     await client.SendAsync(mail, null); // Has await 
     response.success = true; 
     return response; 
    } 

Sau đó, tôi có được điều này:

Không thể chờ đợi 'khoảng trống'

Nhưng nếu tôi làm điều này:

public async Task<SendEmailServiceResponse> ExecuteAsync(SendEmailServiceRequest request) 
    { 
     .... 
     var response = new SendEmailServiceResponse(); 
     client.SendAsync(mail, null); // No Await 
     response.success = true; 
     return response; 
    } 

tôi nhận được điều này:

Phương pháp không đồng bộ thiếu 'đang chờ' và sẽ chạy đồng bộ.

Tôi rõ ràng thiếu điều gì đó, chỉ không chắc chắn về điều gì.

+2

Mặc dù tên của nó, SendAsync không phải là phương thức async (về async \ await), bởi vì nó không trả về Task. – Evk

+1

Câu trả lời ngắn .. bạn không. Đó là một phương pháp đồng bộ trong bối cảnh của api. – Mardoxx

+0

Vì vậy .... không thể gửi một email không đồng bộ? –

Trả lời

5

Khi những người khác đã chỉ ra SendAsync là một chút gây hiểu lầm. Nó trả về một void, không phải là Task. Nếu bạn muốn await một cuộc gọi Thư gửi bạn cần phải sử dụng phương pháp

SendMailAsync(MailMessage message) 

hoặc

SendMailAsync(string from, string recipients, string subject, string body) 

Cả hai trả về một Task và có thể được chờ đợi

+0

Đây không phải là câu trả lời đúng! 'Phương thức async thiếu 'đang chờ' và sẽ chạy đồng bộ.' có nghĩa là phương thức không có bất kỳ cuộc gọi đang chờ nào được đánh dấu là" không đồng bộ ", không phải là vấn đề với cuộc gọi đến SendAsync. –

+1

Câu trả lời của tôi cũng hợp lệ khi xóa từ khóa 'async' khỏi phương thức 'ExecuteAsync()' của OP. Tôi suy ra từ bài viết của OP rằng họ muốn sử dụng các mẫu async/await nên tôi đã đưa ra một giải pháp OP sử dụng mẫu async/await. – maccettura

+0

Điều đó không có nghĩa là lệnh gọi đến SendAsync là sai do không sử dụng từ khóa chờ đợi, đó là những gì OP đề xuất. –

Các vấn đề liên quan