Also this test when stream evaluation happen. listen method also started after the end of main code line and after running all futures. this means listen may create future, but not at the time listen is invoked.
import "dart:async"; main() { Stream stream = new Stream.periodic(const Duration(milliseconds: 1), (x) => x); int receivedCount = 0; var subscription; print("<1>"); int a = 0; new Future.value(1).then((v) { print(">> 1 v: ${v}"); new Future.value(10).then((v) { print(">> 10 v: ${v}"); }); }); bool finished = false; subscription = stream.listen((data) { //expect(data, receivedCount); receivedCount++; print("receivedCount: ${receivedCount}"); finished = true; new Future.value(30).then((v) { print(">> 30 v: ${v}"); }); if (receivedCount == 5) subscription.cancel(); }); new Future.value(2).then((v) { print(">> 2 v: ${v}"); new Future.value(20).then((v) { print(">> 20 v: ${v}"); }); }); /* while (!finished) { } */ print("<2>"); }
<1> <2> >> 1 v: 1 >> 2 v: 2 >> 10 v: 10 >> 20 v: 20 receivedCount: 1 receivedCount: 2 >> 30 v: 30 >> 30 v: 30 receivedCount: 3 receivedCount: 4 >> 30 v: 30 >> 30 v: 30 receivedCount: 5 >> 30 v: 30If we add while loop:
import "dart:async"; main() { Stream stream = new Stream.periodic(const Duration(milliseconds: 1), (x) => x); int receivedCount = 0; var subscription; print("<1>"); int a = 0; new Future.value(1).then((v) { print(">> 1 v: ${v}"); new Future.value(10).then((v) { print(">> 10 v: ${v}"); }); }); bool finished = false; subscription = stream.listen((data) { //expect(data, receivedCount); receivedCount++; print("receivedCount: ${receivedCount}"); finished = true; new Future.value(30).then((v) { print(">> 30 v: ${v}"); }); if (receivedCount == 5) subscription.cancel(); }); new Future.value(2).then((v) { print(">> 2 v: ${v}"); new Future.value(20).then((v) { print(">> 20 v: ${v}"); }); }); while (!finished) { } print("<2>"); }
The output will be just <1>.
<1>These things means future evaluation will happen only main code line was ended.
And the order of future evaluation is the order it was created.
Excellent post!keep update more information like this in future.
ReplyDeletePython Training in Chennai
Python Training in T.Nagar
JAVA Training in Chennai
Big data training in chennai
Selenium Training in Chennai
Python Training in Annanagar