src/Pure/Concurrent/future.scala
changeset 59365 b5d43b01a6b3
parent 57912 dd9550f84106
child 60215 5fb4990dfc73
equal deleted inserted replaced
59364:3b5da177ae6b 59365:b5d43b01a6b3
    45     }
    45     }
    46 }
    46 }
    47 
    47 
    48 trait Promise[A] extends Future[A]
    48 trait Promise[A] extends Future[A]
    49 {
    49 {
       
    50   def cancel: Unit
    50   def fulfill_result(res: Exn.Result[A]): Unit
    51   def fulfill_result(res: Exn.Result[A]): Unit
    51   def fulfill(x: A): Unit
    52   def fulfill(x: A): Unit
    52 }
    53 }
    53 
    54 
    54 
    55 
    76 private class Promise_Future[A](promise: Scala_Promise[A])
    77 private class Promise_Future[A](promise: Scala_Promise[A])
    77   extends Pending_Future(promise.future) with Promise[A]
    78   extends Pending_Future(promise.future) with Promise[A]
    78 {
    79 {
    79   override def is_finished: Boolean = promise.isCompleted
    80   override def is_finished: Boolean = promise.isCompleted
    80 
    81 
       
    82   def cancel: Unit =
       
    83     try { fulfill_result(Exn.Exn(Exn.Interrupt())) }
       
    84     catch { case _: IllegalStateException => }
       
    85 
    81   def fulfill_result(res: Exn.Result[A]): Unit =
    86   def fulfill_result(res: Exn.Result[A]): Unit =
    82     res match {
    87     res match {
    83       case Exn.Res(x) => promise.success(x)
    88       case Exn.Res(x) => promise.success(x)
    84       case Exn.Exn(e) => promise.failure(e)
    89       case Exn.Exn(e) => promise.failure(e)
    85     }
    90     }