diff options
author | Roland <rk@rkuhn.info> | 2012-09-12 14:43:42 +0200 |
---|---|---|
committer | Roland <rk@rkuhn.info> | 2012-09-12 14:43:42 +0200 |
commit | 37cced5769e218e805cdcb1f87846f0f2548c8bb (patch) | |
tree | 982b8479489247de3dcd1aba46aac6685051680c /src | |
parent | 13ff968b9d273e03bfa226ca1ec52949391a6b68 (diff) | |
download | scala-37cced5769e218e805cdcb1f87846f0f2548c8bb.tar.gz scala-37cced5769e218e805cdcb1f87846f0f2548c8bb.tar.bz2 scala-37cced5769e218e805cdcb1f87846f0f2548c8bb.zip |
improve Promise.tryAwait by converting to match statement
- also use type FiniteDuration due to a previous change to
Deadline’s type signature
Diffstat (limited to 'src')
-rw-r--r-- | src/library/scala/concurrent/impl/Promise.scala | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/library/scala/concurrent/impl/Promise.scala b/src/library/scala/concurrent/impl/Promise.scala index f7ab85dc0c..9228872f2b 100644 --- a/src/library/scala/concurrent/impl/Promise.scala +++ b/src/library/scala/concurrent/impl/Promise.scala @@ -12,7 +12,7 @@ package scala.concurrent.impl import java.util.concurrent.TimeUnit.NANOSECONDS import scala.concurrent.{ ExecutionContext, CanAwait, OnCompleteRunnable, TimeoutException, ExecutionException } -import scala.concurrent.util.{ Duration, Deadline } +import scala.concurrent.util.{ Duration, Deadline, FiniteDuration } import scala.annotation.tailrec import scala.util.control.NonFatal import scala.util.{ Try, Success, Failure } @@ -64,7 +64,7 @@ private[concurrent] object Promise { protected final def tryAwait(atMost: Duration): Boolean = { @tailrec - def awaitUnsafe(deadline: Deadline, nextWait: Duration): Boolean = { + def awaitUnsafe(deadline: Deadline, nextWait: FiniteDuration): Boolean = { if (!isCompleted && nextWait > Duration.Zero) { val ms = nextWait.toMillis val ns = (nextWait.toNanos % 1000000l).toInt // as per object.wait spec @@ -84,14 +84,13 @@ private[concurrent] object Promise { } } - if (atMost eq Duration.Undefined) - throw new IllegalArgumentException("cannot wait for Undefined period") - else if (atMost <= Duration.Zero) - isCompleted - else if (atMost == Duration.Inf) - awaitUnbounded() - else - awaitUnsafe(atMost.fromNow, atMost) + import Duration.Undefined + atMost match { + case u if u eq Undefined => throw new IllegalArgumentException("cannot wait for Undefined period") + case Duration.Inf => awaitUnbounded + case Duration.MinusInf => isCompleted + case f: FiniteDuration => if (f > Duration.Zero) awaitUnsafe(f.fromNow, f) else isCompleted + } } @throws(classOf[TimeoutException]) |