gpt4 book ai didi

flutter - 如何在 Dart 中取消延迟的 future ?

转载 作者:行者123 更新时间:2023-12-04 01:06:10 24 4
gpt4 key购买 nike

假设在 Dart/Flutter 中,您有以下代码:

void myOperation() {
// could be anything
print('you didn't cancel me!');
}
请注意,操作本身不是异步的并且是无效的——不返回任何内容。
我们希望它在 future 的某个时刻执行,但我们也希望能够取消它(因为已经请求了一个新的操作来取代它)。
我已经开始这样做:
Future.delayed(Duration(seconds: 2), myOperation())
...但这是不可取消的。
您如何准确地安排该“操作”,同时又使其可取消?
我在想……我们可以像这样修改代码:
Future.delayed(Duration(seconds: 2), () {
if (youStillWantThisToExecute) {
print('you didn't cancel me!');
}
});
但这并不是很好,因为它取决于“全局” bool 值……因此,如果 bool 值翻转为 false,则不会完成任何操作,即使是最近请求的操作,也就是我们想要完成的操作。
如果有一种方法可以创建任意数量的操作实例并单独取消它们……或者为每个操作分配一个唯一的 id,然后而不是使用 bool 控件来控制是否会更好执行......有一个“mostRecentId”int或在执行前检查的东西。
无论如何...
CancelableOperation 仅从它的名字就看起来很有希望。
所以,我查看了它的文档:

CancelableOperation.fromFuture(Future inner, {FutureOr onCancel()})Creates a CancelableOperation wrapping inner. [...] factory


但老实说,这只会让我可怜的脑袋痛得厉害。
我查阅了其他文章、问题和答案,但它们都是某些特定(和复杂)上下文的一部分,并且在任何地方都找不到简单的示例。
有没有办法通过将延迟的 future 包装在其他类中来取消它?
请更有经验的人提供至少一个在 DartPad 中编译的简单、完整、经过验证的示例?
谢谢。

最佳答案

使用定时器:

var t = Timer(Duration(seconds: 400), () async {
client.close(force: true);
});
...
t.cancel();

关于flutter - 如何在 Dart 中取消延迟的 future ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66380613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com