我创建了一个库,它使用同一个库的各个类使用的threadstatic变量。初始化为线程后,所有这些类一起工作以使用这些变量来完成任务。
现在我需要在ASP.NET应用程序中使用相同的库,并且我已经知道threadstatic不会使我的变量对于单个线程是全局的,但是这些将在线程之间共享。
我正在避免将变量传递给函数,因为它听起来不是很好的方法。因此,我需要一个解决方案,使我的库可用于两种类型的应用程序(winforms + webforms),即线程静态和会话的替代。
如何使用库中的字典实现我自己的管理?知道谁叫我(图书馆),即桌面应用程序或asp.net,然后分别使用线程ID或会话ID从字典中获取变量。现在,我不知道是否可能。
如果为这个库创建了一个Web服务,它将由exe而不是IIS托管,以避免ASP.NET共享线程导致线程故障发生故障?
请提出解决方案。
答案 0 :(得分:0)
我已经知道了 threadstatic不会使我的变量 单个线程的全局但是这些 将跨线程共享
问题不在于它们将跨线程共享,而是跨请求共享。在ASP.NET中,线程在请求之间共享,并且请求甚至可以由多个线程处理(尽管我相信只会出现某些地方/情况)。
我避免将变量传递给函数,因为它听起来不太好。
我不确定为什么你认为这是一个糟糕的方法 - 听起来比使用ThreadStatic要好得多:)
如何实现我自己的 管理使用字典 图书馆?知道谁打电话给我 (库)即桌面应用程序或 asp.net以及之后使用线程ID 或者会话ID分别抓取 字典中的变量。对 现在,我不知道是不是 可能与否。
这听起来像是为了避免传递数据,但它应该是可能的。可能有一些内置类可以使这更容易一些,例如使用HttpContext.Items
,这是一个按请求存在的缓存,或CallContext
,但它取决于您的代码的具体方式被使用。