The associated interface feature is a "superset" of the deprecated [Client=] feature.
It seems appropriate to me to use it to put service and client interfaces on the same message pipe. Benefits:
- When the master interface / underlying message pipe is closed, all associated interfaces are disconnected. So you don't have to handle cases such as "what if the service pipe is closed and the client pipe isn't"?
- FIFO guarantee:
service_callback.Run();
client->DoStuff();
Assume that |service_callback| is a callback for a call on the service interface; |client| is the corresponding client interface. If the client is an associated interface, it is guaranteed that the callback arrives at the other end prior to the DoStuff() call.
One thing should be noted: associated interfaces living on different threads than the master interface needs an extra thread hop for dispatching received messages. (Usually client/service interfaces are used on the same thread at both sides, in that case it shouldn't be a problem.)