Я не понимаю разницы между этими двумя реализациями вызова SendMailAsync. В большинстве случаев с первым я получаю исключение TaskCanceledException, но со вторым все работает так, как ожидалось.Причина TaskCanceledException с SendMailAsync?
Я думал, что два метода потребления будут эквивалентны, но, очевидно, я что-то упустил.
Это кажется связано, но напротив: 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);
}
EDIT: Оказывается, метод Caller2 также вызывает исключения, я просто был не видя их из-за рамки WebJobs этого времени называются от. Объяснение Юваля прояснило все это и верно.
Как вы называете Caller1 и Caller2? –
Caller1 и Caller2 являются общедоступным методом, называемым SDK Azure WebJobs. И SDK поддерживает асинхронные методы. –