我有一个传统的COM组件,我的任务是编写Web服务来包装COM并启用并发非阻塞调用。
首先,因为COM对象本身是无状态的,我决定使用[ThreadStatic]属性,这样每个线程将拥有自己的COM对象实例,以防止使用lock {}语句并启用真正的并发处理,但似乎所有调用仍然是同步进行的。
我编写了一个测试代码,使用for{}循环同步运行COM组件的方法,然后添加第二个线程,对另一个COM对象实例执行完全相同的操作,但我没有看到任何变化,X次调用总是消耗Y时间跨度,无论线程计数如何。就像有一个静态锁或类似的东西...
尽管如此,单独的进程可以真正并发地处理每个调用。是什么阻止了单独的线程表现出相同的行为?
我该怎么做才能启用对COM组件的真正并发调用?
首先,因为COM对象本身是无状态的,我决定使用[ThreadStatic]属性,这样每个线程将拥有自己的COM对象实例,以防止使用lock {}语句并启用真正的并发处理,但似乎所有调用仍然是同步进行的。
我编写了一个测试代码,使用for{}循环同步运行COM组件的方法,然后添加第二个线程,对另一个COM对象实例执行完全相同的操作,但我没有看到任何变化,X次调用总是消耗Y时间跨度,无论线程计数如何。就像有一个静态锁或类似的东西...
尽管如此,单独的进程可以真正并发地处理每个调用。是什么阻止了单独的线程表现出相同的行为?
我该怎么做才能启用对COM组件的真正并发调用?