【发布时间】:2016-12-05 20:20:42
【问题描述】:
我正在使用 SendGrid(基于云的 SMTP 服务)从 Web api 项目发送电子邮件。我希望我的应用程序等待/阻塞(例如 30 秒),直到收到来自 SendGrid 的响应,然后再将响应返回给客户端,而不是立即返回。 SendGrid 库有一个 DeliverAsync 方法,它返回一个任务。
我一直在研究如何等待任务。
我已经阅读了无数关于如何做到这一点的文章,并且明白如果这是我自己的代码,我会在任务上使用 ConfigureAwait(false) 来防止死锁并允许我等待。这里的问题是代码不是我的!看起来 SendGrid 没有同步的 Send 方法。
我没有连接异步控制器,虽然很欣赏这是一种方法,但我想知道是否有另一种方法可以做到这一点。
希望这是有道理的!
【问题讨论】:
-
如果您在 Web APi 中使用第三方库 - 那么您可以使用
await并且控制器只会在任务完成后返回。 -
如果在代码中使用 await 关键字没有意义,您可以添加“.GetAwaiter().GetResult();”到异步 SendGrid 调用结束,它将等待异步函数完成。
-
在 ASP:NET Web API 异步方法用于更有效的线程使用。在 WPF 或 Winforms 中,异步方法将在任务完成时释放 UI 线程以进行其他操作,从而通过“非阻塞”UI 线程使 UI “响应”。
-
@Kyle 这只会使程序死锁。
标签: c# asynchronous async-await asp.net-web-api2 sendgrid