प्रश्न स्वयं कहता है, यहां मेरे पास एक सूची है जो write विधि को दो बार कॉल कर रही है लेकिन यह अनुक्रमिक रूप से आउटपुट प्रदान नहीं कर रही है।

void main() {
   List<int> list = [1, 2, 3, 4];
   write(list);
   write(list);
}

write फ़ंक्शन सूची लेता है और 1 मिलीसेकंड की देरी में मानों को प्रिंट करता है

write(List<int> values) async {
  for (int value in values) {
    await Future.delayed(new Duration(microseconds: 1));
    print(value);
  }
}

आउटपुट:

I/flutter (21092): 1
I/flutter (21092): 1
I/flutter (21092): 2
I/flutter (21092): 2
I/flutter (21092): 3
I/flutter (21092): 3
I/flutter (21092): 4
I/flutter (21092): 4

अपेक्षित आउटपुट:

I/flutter (21092): 1
I/flutter (21092): 2
I/flutter (21092): 3
I/flutter (21092): 4
I/flutter (21092): 1
I/flutter (21092): 2
I/flutter (21092): 3
I/flutter (21092): 4
0
Jitesh Mohite 30 जुलाई 2020, 18:36

1 उत्तर

सबसे बढ़िया उत्तर

इस प्रयोग को प्राप्त करने के लिए synchronized lib

इसे अपने पैकेज की pubspec.yaml फ़ाइल में जोड़ें:

dependencies:
  synchronized: ^2.2.0+2

कोड स्निपेट:

write(List<int> values) async {
  var lock = Lock();
  for (int value in values) {
    lock.synchronized(() {
      Future.delayed(new Duration(seconds: 2));
    });
    print(value);
  }
}

आउटपुट:

I/flutter (21092): 1
I/flutter (21092): 2
I/flutter (21092): 3
I/flutter (21092): 4
I/flutter (21092): 1
I/flutter (21092): 2
I/flutter (21092): 3
I/flutter (21092): 4

नोट: synchronized ब्लॉक पहले सभी सूची चलाएगा, उसके बाद ही दूसरी सूची में प्रवेश करने की अनुमति होगी।

-1
Jitesh Mohite 31 जुलाई 2020, 13:27