「m3」の前に、「completer.future.isComplete」で Future が完了したかどうかを確認できましたが、これはなくなったようです。代替品はありますか?または、自分で保存する必要がありますか(_CompleterImpl内にはまだフィールド「_isComplete」があるようですが、公開されていません
5916 次
3 に答える
9
M3 Dart では、独自のフラグを使用するのが最善です。
future.whenComplete(() {
tweenCompleted = true;
});
Dart はシングル スレッド言語なので、競合状態はありません。[action] 関数は、この Future が完了すると呼び出されることに注意してください。
于 2013-01-25T22:04:54.177 に答える
3
@Cutchの解決策の代わりに、Future
を a でラップすることもできCompleter
ます。
Completer<T> wrapInCompleter<T>(Future<T> future) {
final completer = Completer<T>();
future.then(completer.complete).catchError(completer.completeError);
return completer;
}
Future<void> main() async {
final completer = wrapInCompleter(asyncComputation());
if (completer.isCompleted) {
final result = await completer.future;
// do your stuff
}
}
このアプローチは、完了を非同期的に待機し、将来が同期的に完了したかどうかを確認できるため、より機知に富んでいます。
于 2021-10-27T00:07:27.673 に答える
1
Future の拡張機能を使用し、Hugo Passos の回答に基づいて構築します。
extension FutureExtension<T> on Future<T> {
/// Checks if the future has returned a value, using a Completer.
bool isCompleted() {
final completer = Completer<T>();
then(completer.complete).catchError(completer.completeError);
return completer.isCompleted;
}
}
于 2022-01-28T08:42:00.200 に答える