C++/CX で記述された WinRT コンポーネントを使用する WinJS アプリがあります。コンポーネントは、同じスレッドからすべての呼び出しを行う必要がある、巨大なレガシー スレッドセーフでない C++ ライブラリでの作業をカプセル化するバックグラウンド スレッドを生成します。
コンポーネントのバックグラウンド スレッドがプロデューサーであり、JavaScript アプリの UI スレッドがコンシューマーであるプロデューサー/コンシューマー パターンを実装する必要があります。
JavaScript はコンポーネント メソッドを (UI スレッドで) 呼び出すことができ、C++ コードはジョブをバックグラウンド スレッドのキューにポストするため、呼び出し部分は簡単です。
問題はコールバックです。C++ バックグラウンド スレッドによって計算されたデータを UI スレッドにポストする必要があります。確かに IAsyncOperation を JavaScript に戻すことはできますが、この操作がバックグラウンド スレッドからのイベントを待機している間、UI スレッドがブロックされることは望ましくありません。
私のオプションは何ですか?