If all you have is a COM component and an STA component, then you can do nothing to make a service instance of this component call at the same time .
However, this does not stop you from creating multiple instances of the component and making calls to multiple instances. To this end, you can consider using a pool of COM + objects and get your component instances this way.
Please note that only because the service with which the COM component is talking can process requests at the same time is a problem that is completely separate from the client's ability to process calls to it at the same time.
Assuming you can get the code, it's impossible to say what it takes to get it working in MTA or free-threaded (the latter is preferable); we donβt know the details of the implementation or the state that is stored (or what looks like an API).
If the entire component executes, it sends requests and processes the responses without saving the state, then this should be quite simple, it is just a matter of switching the apartment.
However, there are two reasons why a component can be an STA:
1) The component has many states, and the STA is a way to make sure that the state has not been corrupted by simultaneous calls; in this case, your work on creating the MTA / free-threaded component will be difficult, since you will have to protect everything, and even then you will not get any benefits due to all the concurrency checks that may occur (although you can find a way to convert the code to .NET code that is easily thread safe).
2) The component was written in VB6 or a language that does not support the MTA / free-threaded components; in this case, it is impossible to change the apartment model, and you will have to either have several instances or make a conversion to .NET, which is thread safe.
source share