STA でのマーシャリング(2)
うへー、ものすごい間違ってましたorz
いろいろ調べてみた結果、デッドロックは一切起こってなかったです。
自分はいろいろ勘違いしていたようで、COM 側(Source って言うらしい)から Sink 側を呼び出したとき、Sink 側のメッセージキューに要求が溜まり、待ち状態に入りますが、その間もメッセージは処理され続けます。
どういう仕組みかというと、アパートメントの境界を越えてメソッドを呼び出す際に、メインスレッドからサブスレッドを生成(もしくはスレッドプールから取り出す)して、サブスレッドがアパートメントの向こう側にあるメソッドを呼び出し、メインスレッドはサブスレッドの処理が完了するのを待ちながら、メッセージを処理します。
こうすることによって、メソッドを呼び出している途中に自分のメソッドが呼ばれたとしても、自分のメッセージキューは動いているので、そのメソッドを処理することが可能です。
つまり、デッドロックは起こるわけがないということです。
で、何でデッドロックみたく止まってたかというと……
プロクシ/スタブをリコンパイルしてなかっただけでしたorz
何でこんな簡単なこと気が付かなかったんだろう……(;´Д`)
おかげで STA の内部動作がよく分かりました(ノ∀`)