Seq[Out]で処理を記述する)などの違いがある。正確にはsizeThreshold*sizePercentile個のジョブがエンキューされるまで実行を待つようになっている。sizeThresholdと合わせて最低ジョブ実行数を決める。この例では固定値を入れているが名前渡しになっているのでRandom.nextFloat()とか入れるとバッチサイズを都度変化できるようになっている。必要がなければ指定しないでデフォルト値(1.0f)を使えば良さそう。applyに渡してジョブをenqueueする。中でsynchronizedするのでcollectで呼ぶ意味はあまりない。バッチグループごとにsleepを入れたりする機能は無さそうなので、enqueue自体のタイミングで制御すると良さそう。thresholdに関係なく全リクエストの実行を開始したいときはflushBatchを呼ぶ。timeThreshold秒経過してから以下が出力される。20でuserIdsを10個投入した場合の出力(sizePercentile=0.3fなので20*0.3=6個ずつ実行される。7~10個目は数が足りないのでtimeThreshold秒経過してから出力される。Java用なので使わなくて良いFuture.Voidcallbackコールバックよりはmap/flatMapでつなぎたい。ensureはありかも。完了した際のコールバックを設定する。ライブラリなどの汎用コード向けとコメントにある。respondは結果表示やリソースの後始末などの副作用を起こす前提となる。(promiseを解決したりしているコードもちょくちょく見かける。respondとほぼ同じだが、引数として計算の結果を受け取らない。成功しても失敗してもいいから単にリソースをcloseしたい場合などに使える。Future.valueは即時評価なのでraiseできない。FuturePool.unboundedPoolを使う場合はFuture#interruptibleを使うとinterruptできるようになる。逆にinterruptibleを呼ばないとcancel出来ない。RuntimeException("interrupt"))Await.result(f2)raiseWithinN秒以内に終わらないとタイムアウトといった指定が出来る。2秒後にraiseされるf.raiseWithin(2.seconds)Await.result(f)within/bywinthinとbyはDurationを受け取るかTimeを受け取るかの違いしか無い。raseWithinとwithin/byには処理自体のfutureをraiseするか、withinなどの呼び出しの返り値のみをraiseするかの微妙な違いがある。詳細は以下のコメントを参照。2秒後にf2がraiseされるが、raseWithinではf1,f2の両方raiseされるのに対し、within/byはf2のみがraiseされるためf1自体の結果は普通に取得することが出来る。1が表示されるAwait.result(f2)monitoredPromise使いつつネストしていると辛くなるケースを救えるらしい。いまのところ使ったことは無い。以下のようなケースを考えると、notMonitoredは決して終了しない。Futureの再帰ドキュメントにちゃんと実装してあるから再帰してもサンプルにあるようなコードではスタックオーバーフローにならないよと書いてある。monadがマージされてたので試してみたこの辺の事柄です。»プロフィール間違ったことが書いてあったら@matsu_charaまでご連絡ください。Languageに入門(3)はてなブログをはじめよう!matsu_charaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。