使用threadstatic的库在asp.net中使用

时间:2011-02-11 06:55:59

标签: asp.net multithreading session sharing threadstatic

我创建了一个库,它使用同一个库的各个类使用的threadstatic变量。初始化为线程后,所有这些类一起工作以使用这些变量来完成任务。

现在我需要在ASP.NET应用程序中使用相同的库,并且我已经知道threadstatic不会使我的变量对于单个线程是全局的,但是这些将在线程之间共享。

我正在避免变量传递给函数,因为它听起来不是很好的方法。因此,我需要一个解决方案,使我的库可用于两种类型的应用程序(winforms + webforms),即线程静态和会话的替代。

如何使用库中的字典实现我自己的管理?知道谁叫我(图书馆),即桌面应用程序或asp.net,然后分别使用线程ID或会话ID从字典中获取变量。现在,我不知道是否可能。

如果为这个库创建了一个Web服务,它将由exe而不是IIS托管,以避免ASP.NET共享线程导致线程故障发生故障?

请提出解决方案。

1 个答案:

答案 0 :(得分:0)

  

我已经知道了   threadstatic不会使我的变量   单个线程的全局但是这些   将跨线程共享

问题不在于它们将跨线程共享,而是跨请求共享。在ASP.NET中,线程在请求​​之间共享,并且请求甚至可以由多个线程处理(尽管我相信只会出现某些地方/情况)。

  

我避免将变量传递给函数,因为它听起来不太好。

我不确定为什么你认为这是一个糟糕的方法 - 听起来比使用ThreadStatic要好得多:)

  

如何实现我自己的   管理使用字典   图书馆?知道谁打电话给我   (库)即桌面应用程序或   asp.net以及之后使用线程ID   或者会话ID分别抓取   字典中的变量。对   现在,我不知道是不是   可能与否。

这听起来像是为了避免传递数据,但它应该是可能的。可能有一些内置类可以使这更容易一些,例如使用HttpContext.Items,这是一个按请求存在的缓存,或CallContext,但它取决于您的代码的具体方式被使用。