【问题标题】:Sending emails with SendGrid on Azure using C# async, await使用 C# async 在 Azure 上使用 SendGrid 发送电子邮件,等待
【发布时间】:2013-08-24 03:52:56
【问题描述】:

我正在关注 this tutorial,使用 SendGrid 从我的 Azure Web 角色发送电子邮件。

这是教程中的相关部分:

// Create credentials, specifying your user name and password.
var credentials = new NetworkCredential("username", "password");

// Create an REST transport for sending email.
var transportREST = REST.GetInstance(credentials);

// Send the email.
transportREST.Deliver(myMessage);

在我看来transportREST.Deliver 函数是同步的。由于它正在执行 IO,我更喜欢使用新的 .NET 4.5 async, await 代替(我的所有其他代码都是完全异步的)。这可能吗?是否有用于 SendGrid 的异步 API 或某种包装现有调用的方法?

【问题讨论】:

  • “或某种方式来包装现有的调用”你不能包装同步方法使其异步。
  • @svick 我知道,但是如果我为阻塞位生成一个新线程并在其上异步,这可能会好一些,并释放我的服务器线程池以异步处理其他客户端.. 是这比阻塞好?或者可能有一些工作线程在发送这些阻塞电子邮件并添加到它的队列中..
  • 不,实际上这无济于事。线程是相对重量级的,只为这个操作创建一个线程可能会使你的性能变差。最好感谢阻塞,因为它正在阻塞。

标签: c# azure async-await sendgrid


【解决方案1】:

目前 SendGrid C# 库没有异步方法,因为我们希望保持与 .NET 4.0 的兼容性。

您可以自己轻松地进行此更改。事实上,here's a commit 在我们决定坚持使用 .NET 4.0 后我后来恢复了它。

更新:截至 2013 年 10 月 24 日和 sendgrid-csharp 1.2.1,有可用的 DeliverAsync 方法

【讨论】:

  • 支持两个版本可能是个好主意(可能在同一个源中,带有一些条件属性魔法)。所有云 API 都在进行这种转换(Azure Storage 新 RC 已经是异步的)
  • 另一个小要求:请在异步版本中使用 xxxAsync 命名约定
  • 你链接到的提交上的几个 cmets:1. 你的 async 方法返回 void(它们应该返回 Task),所以它们不会那么有用(你不能 @ 987654326@他们)。 2.您可以通过让这些方法返回Tasks 并在方法中使用.ContinueWith 而不是await 来保持与.NET 4.0 的兼容性(在提交中,它看起来并不难使用.ContinueWithawait.
  • 感谢所有建议,我会做一些研究并考虑选项。也可以在 github repo 上发布问题。 github.com/sendgrid/sendgrid-csharp
  • 我在 [github repo ](github.com/sendgrid/sendgrid-csharp/issues/34) 上添加了一个问题,并将在下周开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多