機能の一部として HTTP リクエストを行うライブラリを構築しています。展開される複数の環境で動作させるには、Futures の有無にかかわらず動作できるようにしたいと考えています。
1 つのオプションは、非同期 HTTP 実装を使用しているかどうかに応じて、Future
type を使用してライブラリのインスタンス、またはtype を使用してインスタンスを作成できるように、ライブラリにその応答の型をパラメータ化させることです。Id
( Id
Identity モナドかもしれません - 一貫したインターフェースをユーザーに公開するのに十分です)
私はそのアプローチから始めましたが、複雑になりました。代わりに、必要に応じて Future で同期応答をボックス化し、どこでも Future 型を使用することを本当にやりたいと思っています。ただし、Futures を使用すると、常に何らかのスレッドプールが必要になることを理解しています。これは、たとえば AppEngine (必須環境) では機能しません。
現在のスレッドで実行される値から Future を作成し、スレッドを生成できない環境で問題を引き起こさない方法はありますか?
(追加の要件として、ライブラリを Scala v2.9.1 にクロスビルドできるようにする必要があるため、scala.concurrent で使用できる機能が制限される可能性があります)