【问题标题】:c# asp multi threading or web methodc# asp多线程或web方法
【发布时间】:2018-05-30 03:14:47
【问题描述】:

我正在寻求一些关于多线程/Web 服务的建议,以及我是否应该/如何使用其中之一来解决我的问题。

我的 c# asp 站点上有一个按钮,它执行大量 api 调用,该过程可能需要几分钟。 我想把这个过程分开,这样它就可以“在后台”执行,并且不会影响用户体验。 这个过程紧紧缠绕在我当前的项目中,因此将代码拆分到一个单独的 Web 服务项目中并不容易。

所以..

  1. 如果我运行以下线程代码,如果用户杀死浏览器,它会成功执行吗?我有什么问题/考虑?

线程thread = new Thread(new ThreadStart(RefreshData));

  1. 如果上述方法不起作用,我可以通过向同一个项目中添加一些 [Web 方法] 并从同一个项目中调用它们来完成这项工作吗? (如果是的话 - 有什么建议吗?)

  2. 如果我这样做,它会在另一个 iis 线程中成功执行它们吗?即.. 如果用户终止了他们的浏览器 - 我可以确定服务中的进程将成功完成吗?

另外,我计划在 AWS 上托管该网站 - 因此,如果从这个角度考虑,任何见解也会有所帮助。

提前谢谢帮..

【问题讨论】:

    标签: c# multithreading amazon-web-services webmethod


    【解决方案1】:

    您可以运行后台线程。即使访问者关闭了浏览器窗口,它们也会运行。您可以使用会话/cookie 将这些线程/工作负载与访问者相关联,因此即使在他们重新访问该网站后,他们也可以了解进度。

    你要注意的是防止web服务器进程被回收。默认情况下,这将在某个超时或生命周期后发生。您必须更改相关设置。

    另外,保留对您创建的线程的永久引用,以防止它被垃圾收集。

    【讨论】:

    • 啊,非常感谢 PepitoSh.. 就这样.. 我不需要做任何关联。这个“后台”线程的最后一步是向用户发送电子邮件,这样可以很好地完成它。我只是在查看后台线程上的一些文档...在后台线程的代码块末尾我需要做些什么吗?..另外,您能否简要扩展一下“保留永久引用”?..说如果需要 5-10 分钟..总共 20 分钟..我需要在这里做点什么吗?
    • 我会有一个静态线程管理器组件来创建、跟踪和销毁所有这些线程。如果你想要它花哨,你可以重复使用。如果你愿意,你可以使用内置的工作线程池,但我个人不喜欢使用它,因为缺乏适当的控制。
    猜你喜欢
    • 2013-05-28
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多