在dart中Future.of()与Timer.run()相比的优点?

在dart中Future.of()与Timer.run()相比的优点?,timer,dart,future,Timer,Dart,Future,Dart有许多创建、处理和返回异步函数的方法。最常用的方法之一是: 导入'dart:async'; var completer=new completer(); //在此之前,这将是新的计时器(0,()=>…); Timer.run(()=>completer.complete(doSomethingHere()); 返回completer.future; 然而,dart还为未来的直接应用提供了构造函数,例如: 导入'dart:async'; 返回(()=>doSomethingHere())

Dart有许多创建、处理和返回异步函数的方法。最常用的方法之一是:

导入'dart:async';
var completer=new completer();
//在此之前,这将是新的计时器(0,()=>…);
Timer.run(()=>completer.complete(doSomethingHere());
返回completer.future;
然而,dart还为未来的直接应用提供了构造函数,例如:

导入'dart:async';
返回(()=>doSomethingHere())的新未来;

我知道可以使用static方法的返回值取消
Timer.run()
版本。而且
new Future.of()
版本的代码稍微少一些,使用
new Future.of()
优于
Timer.run()
(反之亦然)是否有特别的好处。或者这些好处仅仅是我刚才提到的吗?

别忘了它们是两个不同的东西<代码>计时器可以在任何地方用于多种用途。例如,它可以在客户端上使用,以便在运行更多代码之前等待布局发生。因此,这可能与未来无关。我有时在客户端代码中使用计时器来等待布局

Timer是用于延迟某些代码运行的通用类。不管它是否与期货有关。另一个例子是客户端动画。与未来或异步处理数据无关

然而,未来是帮助您编写异步程序的单子。基本上是传递普通回调函数的替代

在编写异步程序时使用
newfuture.of()
,它适合您的情况(同样适用于
newfuture.immediate()

如果要延迟某些代码的运行,请使用
定时器


如果您想使用futures进行异步编程,同时延迟代码,请忘记timer类,除非您需要一些实际延迟(大于0/下一个事件)。

Future.of
返回未来,
timer.run
不返回任何内容。对我来说,这是主要区别

如果我想返回一个值作为未来,我使用
Future.of

如果我想以后运行某个函数,我会使用
Timer.run
,我不关心它产生的值

不过,一个很大的区别是函数何时运行

对于
Future.of
,函数在当前事件循环中运行,并且在下一个事件循环中只提供其值


对于
Timer.run
,函数将在下一个事件循环中运行。

谢谢您的回答,但它并没有完全回答我的问题。我很熟悉Future和Timer类是什么。我特别询问了Timer.run静态方法的基础(专门设计为“尽快异步运行”。)与new Future.of()相比,new Future.of()为将在下一个事件循环中运行的提供的回调提供了未来。我提到了我看到的好处(Timer.Run允许在下一个事件循环之前取消它,Future.of不需要显式完成符)。我想知道这是否是唯一的区别。如果您想返回未来并尽快完成它,但不在当前事件循环中,那么只需使用
new future.of()
,而不是使用timer类。当然,您也可以通过调用
complete()来执行您向我们展示的更复杂的方式
在计时器的回调中,但它并没有真正为您提供任何有意义的内容。您可能已经看到一些使用计时器类的代码,因为在早期SDK中,不可能在将来的“下一个事件循环中尽快”完成。现在是。谢谢Seth。这是一个很大的区别(当回调运行时).I不知道Future.of在当前循环中运行回调,并且只为下一个循环保存结果。(虽然Timer.run static方法不能传递延迟,但新的Timer对象会传递持续时间。)。