首页 > 解决方案 > 未取消 未来

问题描述

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

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

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

 );
 c.cancel();

标签: asynchronousdartflutterfuture

解决方案


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


推荐阅读