我不明白這兩個調用SendMailAsync的實現之間的區別。大部分時間,我收到一個TaskCanceledException,但第二個,一切都按預期工作。與SendMailAsync的TaskCanceledException的原因?
我認爲這兩種消費方法是等價的,但顯然我錯過了一些東西。
這似乎相關,但相反:TaskCanceledException when not awaiting
// Common SmtpEmailGateway library
public class SmtpEmailGateway : IEmailGateway
{
public Task SendEmailAsync(MailMessage mailMessage)
{
using (var smtpClient = new SmtpClient())
{
return smtpClient.SendMailAsync(mailMessage);
}
}
}
// Caller #1 code - Often throws TaskCanceledException
public async Task Caller1()
{
// setup code here
var smtpEmailGateway = new SmtpEmailGateway();
await smtpEmailGateway.SendEmailAsync(myMailMessage);
}
// Caller #2 code - No problems
public Task Caller2()
{
// setup code here
var smtpEmailGateway = new SmtpEmailGateway();
return smtpEmailGateway.SendEmailAsync(myMailMessage);
}
編輯:原來,Caller2方法也導致異常的,我只是沒有看到他們由於在WebJobs框架這是被稱爲通過。尤瓦爾的解釋清除了所有這些,並且是正確的。
你打電話給'Caller1'和'Caller2'怎麼樣? –
Caller1和Caller2是由Azure WebJobs SDK調用的公共方法。 SDK支持異步方法。 –