在不同的线程中使用DLL静态变量

时间:2017-07-12 23:49:54

标签: c# asp.net threadpool

我有一个由IIS Express提供的ASP.Net WebAPI(MVC),它使用外部dll库。 遗憾的是,这个库只有一个客户端,这意味着它有一个静态变量" Client"它无处不在。

因此,如果我有许多客户端,对于每个请求,我必须将此静态变量切换到执行请求的客户端。 问题是这样,我需要锁定"变量,因此不允许其他客户请求。

我完全不知道IIS使用线程池管理其线程的方式,但我认为它应该像每个请求一个线程。所以把这个"客户"变量到ThreadStatic可以完成这项工作,因为每个线程的值都不同,但是因为"客户端"在库的内部线程中使用,它应该会产生很多错误。

为了更准确地解释我想要的东西,请考虑以下情况:

你有一段代码,代表我的库:

class Client {
     void doSomething() {}
     void blabla() {}
}

static Client c;

... Code here, probably involving c in threads ...

public void function() {
     c.blabla();
}

在我的应用程序中,我有多个线程想要同时调用doSomething()和function()。所以他们需要"欺骗"编译器创建一个局部变量并将其放入' c'变量。 希望它有所帮助。

2 个答案:

答案 0 :(得分:0)

(根据第一条评论改变了答案)

我会锁定所有访问权限并一次执行一项操作。

如果这还不够好,我认为它已经足够好了。

然后我会看看我是否可以排队工作。

然后我会查看反思System.Reflection.LoadAssembly,但在阅读Best Practices for Assembly Loading后(2017-03-30)。 :)

答案 1 :(得分:0)

经过数小时的研究,我得出结论,唯一(和逻辑)的方法是创建AppDomain或单独的进程。 我也许会按照@OlehNechytailo的建议。