Badr Faisal Saif
Badr Faisal Saif

Reputation: 11

How do you check if an async void method is completed in Dart?

How do you check if an async void method is completed in Dart?

Upvotes: 1

Views: 2045

Answers (4)

Shaan Mephobic
Shaan Mephobic

Reputation: 1216

Method 1:

await voidFoo();
print("the above function was completed");
Future<void> voidFoo() async{
  await Future.delayed(Duration(seconds:1));
}

Method 2:

Using a boolean variable like this,

bool isCompleted = false;
...
await voidFoo();
Future<void> voidFoo() async{
  await Future.delayed(Duration(seconds:1));
  isCompleted = true; //assuming isCompleted can be accessed here
}

Edit: I recommend @pskink's comment.

async method return a Future so use Future.then method

Here is an example of that

Future<void> voidFoo() async {
  await Future.delayed(Duration(seconds: 1));
}

voidFoo().then((_) {
  print("done");
});

Upvotes: 0

Skandar Munir
Skandar Munir

Reputation: 443

You can create an extension function on future and use Extension function like below:

 extension FutureExtension<T> on Future<T> {
   Future<T> timed(String tag) {
     var start = DateTime.now();
        
     return whenComplete(() {
       var d = DateTime.now().difference(start);
       print("$tag finished in ${d.inMilliseconds / 1000}s");
     });
   }
  }


Future<void> foo() async {
  await Future.delayed(Duration(seconds: 3), () {
    print('foo completed');
  });
}

void main() {
  
  foo().timed("Foo");
}

Output:

foo completed
Foo finished in 3.644s

Upvotes: 0

Mohamed Ayman
Mohamed Ayman

Reputation: 59

There are too many methods to do this i prefer to do this

Future<void> myFunction() async {
await Future.delayed(Duration(seconds: 3)); // your future operation
 }


main() async {
await myFunction();
print("finished");
  }

Upvotes: 0

Salih Can
Salih Can

Reputation: 1783

You can use dart Completer.

import 'dart:async';

void main() async {
  final completer = Completer<String>();
  
  Future<String> getHttpData()async{
    return Future.delayed(const Duration(seconds: 1), () => "Future Result");
  }
  
Future<String> asyncQuery()async {

  final httpResponse = await getHttpData();
  completer.complete(httpResponse);

  return completer.future;
}

 print('IsCompleted: ${completer.isCompleted}');
 await asyncQuery();
 print('IsCompleted: ${completer.isCompleted}');
}


Result;

IsCompleted: false
IsCompleted: true

Upvotes: -1

Related Questions