未取消的未来

时间:2018-12-12 08:01:37

标签: asynchronous dart flutter future

我尝试取消Future,但是仍然在.then()中获取执行代码。 为什么它不起作用,我在做什么错了?

var c = CancelableOperation.fromFuture(
     Future.delayed(new Duration(seconds: 5), () {

     }).then((data){
       print("123"); // This code is always called...
     })

 );
 c.cancel();

1 个答案:

答案 0 :(得分:3)

https://pub.dartlang.org/packages/async

  

CancelableOperation类定义了可以被其使用者取消的操作。然后,生产者可以收听此取消消息,并在收到以后停止生产将来的消息。可以使用CancelableCompleter创建。

尤其是这部分

  

然后制作人可以监听取消并停止制作

因此,值的生产者应该停止工作。这并不意味着它不会返回结果。它可能返回null来表示它不是实际结果。

您想要的可能是CancelableCompleter

单元测试可能有助于理解应该如何使用这些类

https://github.com/dart-lang/async/blob/1106a5bfee1472905711da7a78dcd413ba2f6dcf/test/cancelable_operation_test.dart#L93-L134(以及此文件中的其他文件)