2011-02-11 42 views
0

我创建了一个使用线程静态变量的库,供同一个库的各个类使用。一旦初始化线程,所有这些类一起工作以实现使用这些变量的任务。在asp.net中使用threadstatic的库

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

我在回避变量传递给函数,因为它听起来不太好。所以我需要一个解决方案来使我的库适用于这两种类型的应用程序(winforms + webforms),即线程静态和会话的替代品。

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

如果为这个库创建一个web服务,它将由exe而不是IIS托管,以避免由ASP.NET导致的线程共享导致threadstatic失效?

请提出解决方案。

回答

0

,我已经来知道 threadstatic不会让我的变量 全球单个线程,但这些 将跨线程

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

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

我不知道为什么你认为这是一个不错的办法 - 这听起来比使用好了很多ThreadStatic :)

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

这听起来像很多工作,以避免传递数据,但它应该是可能的。可能有一些内置的类可以使这更简单一些,例如使用HttpContext.Items,这是一个存在于每个请求的缓存,或者CallContext,但它取决于您的代码的使用方式。

相关问题