4

Dart には、非同期関数を作成、処理、および返す多くの方法があります。最も一般的な方法の 1 つは次のとおりです。

import 'dart:async';

var completer = new Completer();

// Previously this would have been new Timer(0, () => ....);
Timer.run(() => completer.complete(doSomethingHere()));
return completer.future;

ただし、dart は、次のような Future の直接のコンストラクターも提供します。

import 'dart:async';

return new Future.of(() => doSomethingHere());

Timer.run()静的メソッドの戻り値を使用してバージョンがキャンセルされる可能性があることは承知しています。そして、new Future.of()バージョンがわずかに少ないコードであること、new Future.of()オーバーを使用することには特に利点がありますTimer.run()か (またはその逆)。それとも、メリットは単に私が言及したものですか?

4

2 に答える 2

3

Future.ofFuture を返しますが、Timer.run何も返しません。私にとって、これが主な違いです。

Future.of値を Future として返したい場合に使用します。

後で何らかの関数を実行したい場合に使用Timer.runしますが、それが生成する値は気にしません。

ただし、 1 つの大きな違いは、関数が実行されるときです

の場合Future.of、関数は現在のイベント ループで実行され、そののみが次のイベント ループで使用可能になります。

の場合Timer.run、関数は次のイベント ループで実行されます。

于 2013-02-22T08:01:17.283 に答える
2

これらは 2 つの異なるものであることを忘れないでください。Timer非常に多くの目的でどこでも使用できます。たとえば、さらにコードを実行する前にレイアウトが発生するのを待つために、クライアント側で使用できます。したがって、先物とは関係ないかもしれません。クライアント側のコードでタイマーを使用して、レイアウトを待機することがあります。

Timer は、一部のコードの実行を遅らせるためのジェネリック クラスです。それが先物と関係があるかどうかは関係ありません。もう 1 つの例は、クライアント側のアニメーションです。先物やデータの非同期処理とは関係ありません。

ただし、Future は、非同期プログラムのプログラミングを支援するモナドです。基本的には、単純なコールバック関数を渡す代わりになります。

new Future.of()非同期プログラムを作成するときに使用し、状況に適しています ( new Future.immediate().

Timer一部のコードの実行を遅らせたい場合は、このクラスを使用します。

非同期プログラミングにフューチャーを使用し、同時にコードを遅延させたい場合は、実際の遅延 (0/next イベント以上) が必要でない限り、タイマー クラスを忘れてください。

于 2013-02-20T20:42:31.983 に答える