5

機能の一部として HTTP リクエストを行うライブラリを構築しています。展開される複数の環境で動作させるには、Futures の有無にかかわらず動作できるようにしたいと考えています。

1 つのオプションは、非同期 HTTP 実装を使用しているかどうかに応じて、Futuretype を使用してライブラリのインスタンス、またはtype を使用してインスタンスを作成できるように、ライブラリにその応答の型をパラメータ化させることです。Id( IdIdentity モナドかもしれません - 一貫したインターフェースをユーザーに公開するのに十分です)

私はそのアプローチから始めましたが、複雑になりました。代わりに、必要に応じて Future で同期応答をボックス化し、どこでも Future 型を使用することを本当にやりたいと思っています。ただし、Futures を使用すると、常に何らかのスレッドプールが必要になることを理解しています。これは、たとえば AppEngine (必須環境) では機能しません。

現在のスレッドで実行される値から Future を作成し、スレッドを生成できない環境で問題を引き起こさない方法はありますか?

(追加の要件として、ライブラリを Scala v2.9.1 にクロスビルドできるようにする必要があるため、scala.concurrent で使用できる機能が制限される可能性があります)

4

2 に答える 2

3

私が理解していることから、何かを実行してから、結果を でラップしたいと考えていFutureます。その場合、いつでも使用できますPromise

val p = Promise[Int]
p success 42
val f = p.future

したがってfuture、最終値を含むラッパーができました42

Promise はここで非常によく説明されています。

于 2013-08-01T12:46:18.997 に答える
1

Future トレイトの Scalaz バージョンをてみましょう。これは、すべての ExecutionContext インポートを完全に削除する + 呼び出されない限りfork、または呼び出されない限り、現在のスレッドによって実行される Trampoline メカニズムの上に基づいています =)apply

于 2013-08-01T13:26:18.770 に答える