加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 使用ASP.NET MVC进行消防和遗忘

发布时间:2020-12-15 18:42:48 所属栏目:asp.Net 来源:网络整理
导读:我正在寻找有关火灾的最佳做法的信息,并忘记了asp.net mvc操作…本质上我想要一个移动客户端拨打电话;服务器启动异步任务;然后尽可能快地返回到移动客户端。 但是我想确保,假设没有例外,异步任务将成功完成。显然有几个不同的选择: 制作新主题 在ThreadP
我正在寻找有关火灾的最佳做法的信息,并忘记了asp.net mvc操作…本质上我想要一个移动客户端拨打电话;服务器启动异步任务;然后尽可能快地返回到移动客户端。

但是我想确保,假设没有例外,异步任务将成功完成。显然有几个不同的选择:

>制作新主题
>在ThreadPool上排队工作项
>开始异步委托调用
>启动任务

我认为任务将是这里最好的选择,但想要从SO获得想法。

编辑:根据一些答案明确:客户端不需要响应。一旦服务器开始异步任务,我希望HTTP请求尽可能快地完成。我知道客户端上的异步模式,但是我想限制移动设备维持连接打开所需的时间。此外,想避免有一个单独的过程轮询或推送消息(通过队列,总线等),因为这是过度的。我只想记录一个数据库,客户端不需要保持连接,直到该IO完成。

解决方法

我知道这是一个古老的问题,但这是我对这些事情的看法,因为我不同意接受的答案。

您不需要AsyncController,因为您不希望等待异步操作完成。所以你对MVC方面的问题的答案是:没关系。你可以以任何方式做你的工作,并且只需要一个常规的旧的动作来启动进程并返回你想要的任何结果。

你的问题的第二部分真的更相关。假设一个任务本身不会引发异常,你可以确定你的异步任务是不会发生在你的Web进程中的。这个答案取决于你的可靠性要求。

你提到你不想要一个单独的过程,这会限制你的选择。您的任务将与您的Web应用程序在同一应用程序域中运行。如果任何事情导致应用程序域名或进程失效,您的任务将会死亡,可能会处于奇怪的状态。这不一定甚至来自未处理的例外。可以将IIS设置为不时或在某些条件下自动回收应用程序。或者如果您发布新的代码或触摸bin目录中的任何内容,则所有请求完成后,您的应用程序域将被拆除,并启动新的代码。如果这些情况是您的展示停止,那么您别无选择,只能将您的任务转移到某种消息传递中。

如果你不担心IIS杀死你,你还是要担心自己。如果您没有使用AppDomain.UnhandledException事件处理这些异常,其他后台任务的未处理异常将会导致该进程失效。在使用任务并行库的情况下,如果在TaskScheduler.UnobservedTaskException中没有最后的机会观察它们,则通过等待或查看“结果”或“异常”属性不会观察到的异常任务将会导致此过程。事件。

另外要注意的是,用于您的后台操作的任何ThreadPool线程将无法在此期间为您的Web应用程序提供请求。您可以管理池中的最大线程,或者启动一个新的线程。或者如果您使用TPL与默认调度程序,请使用LongRunning提示调度任务以有效地获取新线程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读