Scala Promise的trySuccess和tryFailure使用

import scala.concurrent.Promise
import scala.util.{Failure, Success}

/**
 *
 * @author zhangap 
 * @version 1.0, 2020/7/15
 *
 */
object TestFuture {


  def main(args: Array[String]): Unit = {
    //TODO trySuccess情况一: 如果promise还未完成,则接受传递的值,并返回true
    printPromise(testTrySuccess1())

    //TODO trySuccess情况二: 如果promise已经完成,则忽略传递的值,并返回false
    testTrySuccess2(printPromise)

    //TODO tryFailure情况一: 如果promise还未完成,则接受传递的值,并返回true
    testTryFailure1(printPromise)
    //TODO tryFailure情况一: 如果promise已经完成,则忽略传递的值,并返回false
    testTryFailure2(printPromise)
  }

  private def testTryFailure2(callback: Promise[Any] => Unit): Unit  = {
    val p = Promise[Any]
    p.failure(new RuntimeException("execfailure"))
    println(p.tryFailure(new RuntimeException("tryFailure")))
    callback(p)
  }

  private def testTryFailure1(callback: Promise[Any] => Unit): Unit  = {
    val p = Promise[Any]
    println(p.tryFailure(new RuntimeException("tryFailure")))
    callback(p)
  }


  private def testTrySuccess1(): Promise[Any] = {
    val p = Promise[Any]
    println(p.trySuccess("trySuccess"))
    p
  }

  private def testTrySuccess2(callback: Promise[Any] => Unit): Unit = {
    val p = Promise[Any]
    p.success("finish")
    println(p.trySuccess("trySuccess"))
    callback(p)
  }

  private def printPromise(promise: Promise[Any]): Unit = {
    import scala.concurrent.ExecutionContext.Implicits.global
    promise.future.onComplete {
      case Success(value) => println(s"success:$value")
      case Failure(exception) => exception.printStackTrace()
    }
  }

}

运行结果
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。