c# - 来自 Application_Error() 的异步调用

标签 c# asp.net-mvc-5

我正在尝试找出如何从 MVC 中的 Application_Error 方法创建异步调用。

我有一个我编写的电子邮件 dll,它使用 Smtp 客户端通过异步调用发送电子邮件。

问题是,当我在我的 dll 中调用 SendEmail 方法时,我有需要等待调用的冲突。现在,如果我尝试这样的事情:

protected async void Application_Error()
{
    var await emailService.SendEmail("Hello World");
}

它不会工作,甚至永远不会调用该方法。

有没有办法让我从同步方法进行异步调用?我的在线研究暗示 HttpServerUtility.TransferRequest 可能是答案,但我无法弄清楚如何让它与我的请求一起工作,目前它对我来说没有意义。

最佳答案

对于那些将来可能会遇到此问题的人,这里是另一个可能更强大的解决方案。您可以使用 HostingEnvironment.QueueBackgroundWorkItem() 而不是使用 ThreadPool.QueueUserWorkItem()。以这种方式做事,要求服务器在关闭之前付出更多的努力来完成这些任务。

这是最近项目的一个例子:

void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();
    HostingEnvironment.QueueBackgroundWorkItem(ct =>
        ExceptionLogger.LogAsync(ex));
}

关于c# - 来自 Application_Error() 的异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35039235/

相关文章:

使用 ASP.Net MVC/Web API 进行 PayPal 结帐 - token 身份验证问题

c# - 如果不存在则创建目录

c# - .NET C# mysql SUBSTRING 给我 System.Byte[]?

javascript - 从 angularjs 文件调用 apicontroller 时未发现错误

c# - 用户事件概况和统计数据

c# - 将文件写入 Common Application Data 文件夹被拒绝

c# - 基类中的属性未出现在 View 模型中

c# - 与结构约束的协方差

c# - 如何从保存在数据库中的字节数组设置CSS背景图像

c# - "OnDisconnected(): no suitable method found to override"- SignalR