2011-12-15 16 views
2

私はF#の外部DSLで作業しています。言語は、並列ループを許可する必要があります。F#のプロセス間通信

start 5 times 
    operation 

これはoperation非同期で5回を開始し、実行を継続します。しかし、operationはThread-unsafeライブラリ(これを避ける方法はありません)を使用しているため、少し複雑です。したがって、各反復を別々のプロセスで開始する必要があると思います。

これはスレッドセーフではない問題を回避する唯一の方法であると仮定して、実行する必要がある実行サブツリー(この時点では区別されたユニオン)をプロセスに渡して渡すにはどうすればよいですか?

私はWCF名前付きパイプを考えていますが、選択肢は(WCFは(それを追跡する)と、サブツリーを返すコールバックを待って、プロセスを開始することを意味がある場合聞きしたいと思います非常にfunctonalフレンドリー-notコードは多分私は間違っている)。

また、この場合のパフォーマンスはあまり重要ではありません。

編集: 私は、プロセスが開始された後で通信する必要はありません。私は、単に式の文字列をプロセスのスタートアップパラメータとして渡し、解析/実行させたいと思っています。私はまだ代替案に興味がありますが、それより簡単なものはないと思います。

+1

スレッドプリミティブを達成するために同期プリミティブ( 'ManualResetEvent'、' Semaphore'など)を使用できますか?それはIPCよりずっと簡単です。 – Daniel

+0

いいえ、ライブラリーが巨大であり、私はそれに何か変更を加えることは許されないという意味で、すべての呼び出しが真に同時に実行されなければなりません。 –

+0

複数のAppDomainsを使用すれば十分ですか? – Daniel

答えて

0

可能であれば、別のAppDomainで各操作を実行すると、IPCより簡単になります。