在没有一定需要的情况下在 ASP.Net 页面上使用 Async="true" 可能出现的问题

Posted

技术标签:

【中文标题】在没有一定需要的情况下在 ASP.Net 页面上使用 Async="true" 可能出现的问题【英文标题】:Possible problems with using Async="true" on ASP.Net Page without certain need 【发布时间】:2013-05-29 12:49:34 【问题描述】:

例如,我在 Global.asax 中有一些异常处理代码,在这里我调用 SmtpClient 的 SendAsync() 方法来通知自己错误。

如果某个页面的 Async 属性为“false”,我不会收到任何信件。那么,要修复它,我是否必须在我的 ASP.NET WebForms 应用程序的每个页面上设置 Async="true" ?我可以在这里遇到任何问题吗?

只有在我的应用程序中发送电子邮件时才需要 Async="true"。

如果有任何帮助,我将不胜感激......

【问题讨论】:

【参考方案1】:

请在以下位置查看完整帖子; The Dangers of Implementing Recurring Background Tasks In ASP.NET

存在三个主要风险,我将在本博客中重点介绍其中一个 发帖。

1- 与请求无关的线程中未处理的异常将导致进程停止。即使您有处理程序也会发生这种情况 通过 Application_Error 方法设置。我将尝试解释为什么 后续博客文章,但这很容易处理。

2- 如果您在 Web Farm 中运行您的网站,您最终可能会得到应用程序的多个实例,它们都尝试在 同时。比第一项更具挑战性, 但仍然不太难。一种典型的方法是使用资源 对所有服务器(例如数据库)通用,作为同步 协调任务的机制。

3- 运行您的网站的 AppDomain 可能因多种原因而关闭,并导致您的后台任务随之中断。这可能会损坏 如果它发生在你的代码执行过程中的数据。

【讨论】:

以上是关于在没有一定需要的情况下在 ASP.Net 页面上使用 Async="true" 可能出现的问题的主要内容,如果未能解决你的问题,请参考以下文章

在没有npm的情况下在ASP.NET MVC 5中生成javascript包

如何在没有 Flash 的情况下在 Firefox 中实现复制到剪贴板。需要实施[重复]

没有 ASP.NET/IIS 的 .NET Web 服务?

在没有回发的情况下重置 ASP.NET 中的页面

如何在没有 iFrame 的情况下在另一个页面内显示外部网站? [关闭]

重置会话超时而不在 ASP.Net 中进行回发