问题描述
我需要从使用同步方法的Asp.net WebForms应用程序发送电子邮件。我知道我可以使用SMTP发送电子邮件,但是我想使用SendGrid C#库API发送电子邮件,该API更快(根据我的测试)。 https://github.com/sendgrid/sendgrid-csharp
这是我的代码。以下五种方法中的哪一种是正确的?它们都能正常工作,Visual Studio不会显示任何错误。我不想使用不正确的方法在生产网站中引起错误。
static void SendSampleEmailSync()
{
var client = new SendGridClient(apiKey);
var from = new EmailAddress("[email protected]","example user");
var subject = "Sending with Twilio SendGrid is Fun";
var to = new EmailAddress("[email protected]","example user");
var plainTextContent = "and easy to do anywhere,even with C#";
var htmlContent = "<strong>and easy to do anywhere,even with C#</strong>";
var msg = MailHelper.CreateSingleEmail(from,to,subject,plainTextContent,htmlContent);
// Method 1
var task = Task.Run(() => client.SendEmailAsync(msg));
var result = task.Result;
// Method 2
var result2 = client.SendEmailAsync(msg).Result;
// Method 3
_ = client.SendEmailAsync(msg);
// Method 4
client.SendEmailAsync(msg).ConfigureAwait(false);
// Method 5
var result4 = Task.Run(() => client.SendEmailAsync(msg)).GetAwaiter().GetResult();
}
解决方法
最好的方法似乎是使用此方法:
var result = Task.Run(() => client.SendEmailAsync(msg)).GetAwaiter().GetResult();
,
您可以这样使用。
static async Task Execute()
{
var apiKey = Environment.GetEnvironmentVariable("NAME_OF_THE_ENVIRONMENT_VARIABLE_FOR_YOUR_SENDGRID_KEY");
var client = new SendGridClient(apiKey);
var from = new EmailAddress("[email protected]","Sample User");
var subject = "Sending with SendGrid is Fun";
var to = new EmailAddress("[email protected]","Sample User");
var plainTextContent = "and easy to do anywhere,even with C#";
var htmlContent = "<strong>and easy to do anywhere,even with C#</strong>";
var msg = MailHelper.CreateSingleEmail(from,to,subject,plainTextContent,htmlContent);
var response = await client.SendEmailAsync(msg);
}