STA COM对象的阻塞方法是设计缺陷吗?

STA COM对象的阻塞方法是设计缺陷吗?,com,blocking,sta,Com,Blocking,Sta,假设在STA线程上创建COM对象。因此,对该对象的所有调用都在该线程中序列化。所以,如果对象的某个方法被阻塞,则使用该对象的所有线程都被阻塞 因此,在STA COM对象中使用阻塞方法是需要避免的设计缺陷吗 如果COM对象是自由线程,是否可以使用阻塞方法 谢谢是的,单线程单元上的对象通过消息进行同步,并且对它们的所有调用都以这样的方式序列化,即在任何时候都不能对任何此类对象调用多个方法(也不能在任何时候多次调用任何方法)。这是经过设计的,是为了达到一定程度的螺纹安全。拥有一个长时间运行的方法本身并

假设在STA线程上创建COM对象。因此,对该对象的所有调用都在该线程中序列化。所以,如果对象的某个方法被阻塞,则使用该对象的所有线程都被阻塞

因此,在STA COM对象中使用阻塞方法是需要避免的设计缺陷吗

如果COM对象是自由线程,是否可以使用阻塞方法


谢谢

是的,单线程单元上的对象通过消息进行同步,并且对它们的所有调用都以这样的方式序列化,即在任何时候都不能对任何此类对象调用多个方法(也不能在任何时候多次调用任何方法)。这是经过设计的,是为了达到一定程度的螺纹安全。拥有一个长时间运行的方法本身并不是一个大问题,除非引入死锁。是的,呼叫者将等待,直到他们的呼叫依次运行


多线程单元中的对象不是通过消息同步的——对这些对象的所有调用都是直接进行的,不需要同步,因此可以在任何时候在任何对象上并行调用多个或多个方法,并且由对象来确保线程安全。方法当然可以在内部阻塞,但应注意不要引入死锁。

发生了什么类型的阻塞?WaitForMultipleObjects?留言箱?紧密循环?