gpt4 book ai didi

c# - asp.net 中的线程 (C#)

转载 作者:太空宇宙 更新时间:2023-11-03 11:38:48 26 4
gpt4 key购买 nike

当用户访问 .aspx 页面时,我需要在新线程中启动一些后台计算。计算结果需要存储在用户的 Session 中,以便在回调时可以检索结果。此外,在回调中,我需要能够看到后台计算的状态。 (例如,我需要检查计算是否已完成并成功完成,或者它是否仍在运行)我该如何完成?

问题

  1. 我如何检查线程的状态?多个用户可以同时运行后台计算,所以我不确定知道哪个线程属于哪个用户的过程是如何工作的……(尽管在我的场景中,唯一重要的线程是最初由用户 A -- 并且用户 A 执行回调以检索/检查该线程的状态)。
  2. 我的假设是否正确,将用户的 HttpSessionState“Session”变量传递给新线程,将按我预期的方式工作(例如,我可以稍后将内容添加到他们的 Session)。

谢谢。另外我不得不说,我可能对某些事情感到困惑,但现在的 SO 登录系统似乎有所不同,所以我无法访问我的旧帐户。

编辑

我现在正在考虑使用 this article 中描述的方法它基本上使用一个类和一个单例来管理线程列表。不是将我的数据存储在数据库中(并导致与检索数据相关的性能损失,以及数据库中的额外表、维护等),我可能也会将数据存储在我的类中。

编辑2

我第一次编辑时提到的方法效果很好。此外,我还有计时器来确保在相应的计时器调用它们的清理方法后清理线程及其相关数据。包含我的数据和线程的对象存储在 Singleton 类中。对于某些应用程序,使用数据库进行存储可能是合适的,但对我来说这似乎有点过分,因为我的数据与页面的特定实例相关联,并且在该页面上下文之外无用。

最佳答案

期望 session 状态在这种情况下继续工作;工作人员可能不知道用户是谁,即使知道(或者更有可能:您将此数据捕获到工作人员中),也没有理由存储任何东西(更新 session 是迈向请求管道末尾的一步;但是如果您不在管道中...?)。

我怀疑您可能需要使用用户的某些唯一属性(他们的 id 或 cn)单独存储此数据,或者以其他方式发明一个 GUID。在一台机器上,将其存储在同步字典(或类似的)中可能就足够了,但在农场/集群上,您可能需要将数据向下推送到数据库或状态服务器。并手动获取。

关于c# - asp.net 中的线程 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372069/

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