gpt4 book ai didi

asp.net-mvc - 使用 ASP.NET MVC 即发即弃

转载 作者:行者123 更新时间:2023-12-03 10:58:04 25 4
gpt4 key购买 nike

我正在寻找关于火灾的最佳实践的信息,忘记了 asp.net mvc 操作......基本上我想要一个移动客户端调用电话;服务器启动异步任务;然后尽快返回移动客户端。

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

  • 创建一个新线程
  • 在线程池上排队一个工作项
  • 开始异步委托(delegate)调用
  • 开始任务

  • 我认为 Task 将是这里的最佳选择,但想从 SO 中获得想法。

    编辑:根据一些答案进行澄清:客户不需要回应。我希望服务器开始异步任务后尽快完成 HTTP 请求。我知道客户端上的异步模式,但是我想限制移动设备保持连接打开所需的时间。此外,希望避免有一个单独的进程来轮询或推送消息(通过队列、总线等),因为这太过分了。我只想在数据库中记录一些东西,客户端不需要保持连接直到 IO 完成。

    最佳答案

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

    您不需要 AsyncController因为您对等待异步操作完成不感兴趣。因此,关于 MVC 方面的问题的答案是:没关系。您可以以任何方式完成您的工作,只需一个常规的旧操作即可启动该过程并返回您想要的任何结果。

    您问题的第二部分确实更相关。您希望确保您的异步任务不会发生任何事情,因为您已经从 Web 进程启动它们,假设任务本身不会引发异常。答案取决于您的可靠性要求。

    您提到您不想要单独的流程,这限制了您的选择。您的任务将与您的 Web 应用程序在同一个应用程序域中运行。如果有任何事情导致应用程序域或进程崩溃,您的任务就会死掉,可能会处于一种奇怪的状态。这甚至不一定来自未处理的异常。 IIS 可以设置为不时或在某些条件下自动回收应用程序。或者如果你发布新代码或触摸 bin 目录中的任何内容,在所有请求完成后,你的应用域将被拆除,并启动一个新的。如果这些案例对您来说是一个阻碍,那么您别无选择,只能将您的任务移出进程并与某种消息进行通信。

    如果您不担心 IIS 会杀死您,那么您仍然需要担心自己。如果您没有最后机会使用 AppDomain.UnhandledException 处理来自其他后台任务的未处理异常,则会导致进程停止。事件。在使用任务并行库的情况下,Wait 未观察到的异常任务了解他们或查看ResultException如果您没有最后机会在 TaskScheduler.UnobservedTaskException 中观察它们,属性将会降低进程。事件。

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

    关于asp.net-mvc - 使用 ASP.NET MVC 即发即弃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6374860/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com