_Future.apply
_は非同期計算を開始しますが、_Future.successful
_は指定された結果ですでに完了したFutureを作成します。
Future(None)
(Future.apply(None)
)はFuture.successful(None)
より効率的ではありませんか?
Future.apply(None)
は非同期計算を作成し、それを実行します。これは、追加のラムダオブジェクトが作成され、追加のタスクがスケジュールされることを意味します(ただし、些細なタスク)。
Future.successful(None)
は、すでに完成した未来を生成します。それはより効率的です。
Future(None)
は大きなオーバーヘッドを与えるとは思いませんが、デフォルトの実装では、apply
を呼び出すたびにForkJoinスレッドプールの新しいタスクが生成されますが、Future.successful(None)
すぐに完了します。また、将来的にmap
またはflatMap
を呼び出すたびに、ポーリングの新しいタスクが作成されます。これにより、オーバーヘッドも発生するため、scalaz
Futureを確認することをお勧めします。 /このような詳細をより慎重に処理するタスクの実装。