【问题标题】:Asynchronous threads and session异步线程和会话
【发布时间】:2011-07-03 01:53:52
【问题描述】:

当使用此签名生成新的异步线程时,ASP.NET 会话对象是否可用于此新线程?

IAsyncResult asyncCall = f.BeginInvoke(null, f);

【问题讨论】:

标签: c# asp.net session asynchronous


【解决方案1】:

我不知道您在谈论哪个会话对象,但如果您谈论 ASP.NET 会话,它可能不可用。从后台线程访问 ASP.NET 会话也是一种不好的做法。我建议你将一个包含所有必要信息的对象传递给这个后台线程,而不是让它从会话中拉取东西 => 使其可重用性降低。

通常,如果该线程的调用者等待它完成会话,则应该一直可用,但老实说,这是糟糕的设计,我会简单地避免它。

【讨论】:

  • 是的,我说的是 ASP.NET 会话对象。是因为 ASP.NET 会话对象不是线程安全的?
  • 而且我认为即使它在线程启动时可用,它也可以随时被释放,尽管如果调用者在退出之前要等待异步任务完成,会话应该完成任务。
  • @Jim,好点,我已经更新了我的答案以包含这些信息。
  • @Darin 那么在后台线程和页面之间共享对象的最佳方式是什么?我面临同样的问题。 stackoverflow.com/questions/6152644/…
  • @NLV,你可以在启动线程时传递所有必要的信息。就线程向页面传递信息而言,您必须定义 page 的含义,因为后台线程执行启动该线程的页面可能早已不复存在。
猜你喜欢
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 2015-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
相关资源
最近更新 更多