使用非线程安全的外部 .NET 库?

问题描述 投票:0回答:1

我们的票务系统供应商提供了一个 .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

c# .net thread-safety
1个回答
2
投票

使用 appdomains 似乎是一个不错的选择。

请参阅 如何防止 .NET 运行时中的静态变量共享?在 .Net 中,公共静态变量的“静态性”仅限于 AppDomain 或整个进程? 对于人们遇到的类似问题。

可以在此处找到 msdn 指南 http://msdn.microsoft.com/en-us/library/ms173138(v=vs.90).aspx

请记住,AppDomain 是一个 .net 概念,非托管资源仍然可能是一个问题。

© www.soinside.com 2019 - 2024. All rights reserved.