我们的票证系统供应商提供了一个.NET API库,我一直在尝试从多线程应用程序中使用它。我遇到了各种各样的连接/有状态问题,我相信这可能是因为它不是“线程安全的”(我仍然是C#和线程应用程序的新手,所以我现在的猜测只是一些症状排队)。
API没有实例化的类,只需从它的命名空间中调用静态方法TrebuchetApi.Api.Connect()
和TrebuchetApi.Api.Login()
(实际上所有方法看起来都是静态的)。
所以我可能有一个线程做一件事,另一个做其他事情,底层API变得混乱(应该设置的静态变量为null等)。
有没有办法让我的每个线程都使用API的全新'实例',或者这是不可避免的?
更新
为清楚起见,在使用AppDomains的建议后,我发现这篇文章提供了我需要的确切框架: http://www.superstarcoders.com/blogs/posts/executing-code-in-a-separate-application-domain-using-c-sharp.aspx
答案 0 :(得分:2)
使用appdomains似乎是要走的路。
有关人们的类似问题,请参阅How do I prevent static variable sharing in the .NET runtime?或In .Net is the 'Staticness' of a public static variable limited to an AppDomain or the whole process?。
可以在http://msdn.microsoft.com/en-us/library/ms173138(v=vs.90).aspx
找到msdn指南请记住,AppDomain是一个.net概念,非托管资源仍然是一个问题。