首页 > 解决方案 > 如何通过同步方法使用 SendGrid C# 库发送电子邮件?

问题描述

我需要从使用同步方法的 Asp.net WebForms 应用程序发送电子邮件。我知道我可以使用 SMTP 发送电子邮件,但我想使用更快的 SendGrid C# 库 API 发送电子邮件(根据我的测试)。https://github.com/sendgrid/sendgrid-csharp

这是我的代码。下面这五种方法哪一种是正确的?它们都可以工作,Visual Studio 没有显示任何错误。我不想因为使用不正确的方法而导致生产网站出错。

static void SendSampleEmailSync()
{
    var client = new SendGridClient(apiKey);
    var from = new EmailAddress("123@sink.sendgrid.net", "example user");
    var subject = "Sending with Twilio SendGrid is Fun";
    var to = new EmailAddress("123@sink.sendgrid.net", "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();
}

标签: c#asp.netsendgrid

解决方案


根据我在此页面上阅读的内容:https ://docs.microsoft.com/en-us/archive/msdn-magazine/2015/july/async-programming-brownfield-async-development#the-thread-pool-hack

看起来最好的方法是使用这种方法:

var result = Task.Run(() => client.SendEmailAsync(msg)).GetAwaiter().GetResult();

推荐阅读