未取消 未来

Ant*_*kin 5 asynchronous future dart flutter

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

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

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

 );
 c.cancel();
Run Code Online (Sandbox Code Playgroud)

Gün*_*uer 6

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(以及此文件中的其他人)

  • 至于为什么不能取消`Future`:`Future` 不代表计算。它代表计算的*结果*。这使得分享期货是安全的——你可以将未来传递给任何人,也可以传给多人,而不会给他们干扰操作的方式。上面提到的类用于表示操作本身(然后它们包含表示结果的未来)。 (2认同)