0

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

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

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

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

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

请提出解决方案。

4

1 回答 1

0

而且我已经知道 threadstatic 不会使我的变量对于单个线程来说是全局的,但是这些将在线程之间共享

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

我避免将变量传递给函数,因为这听起来不是很好的方法。

我不确定您为什么认为这是一种不好的方法-听起来比使用 ThreadStatic 好多了:)

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

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

于 2011-03-06T13:46:28.373 回答