-
Notifications
You must be signed in to change notification settings - Fork 3.1k
perf: avoid double checking value0
Future.
#10972
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: 2.13.x
Are you sure you want to change the base?
Conversation
fbd326d
to
dc8956b
Compare
|
refs: scala/scala3#22304 |
@@ -170,7 +173,7 @@ package concurrent { | |||
@throws(classOf[TimeoutException]) | |||
@throws(classOf[InterruptedException]) | |||
final def ready[T](awaitable: Awaitable[T], atMost: Duration): awaitable.type = awaitable match { | |||
case f: Future[T] if f.isCompleted => awaitable.ready(atMost)(AwaitPermission) | |||
case f: Future[T] if f.isCompleted => awaitable |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, just back from hometown , will check this weekend
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
are you still interested in this, @He-Pin?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can take a look at this , this weekend.
Motivation:
The current
Future.isComplete
check thevalue0
once, and then it will checked it again to extract the value.Modification:
Use
.value
to extract the value at the same time.Result:
Better performance when the future is already completed.
The result if
successOption
with this modification.I still checked adding an
Future#unwrap = value0()
method to avoid the lifting toSome/None
,but seems not help much.