আমি ফ্লটার ফ্রেমওয়ার্ক ব্যবহার করে একটি আবেদন করছি। এই সময়ে আমি ডার্ট async
এবং এর কীওয়ার্ডগুলি পেয়েছিলাম async*
। কেউ আমাকে বলতে পারেন যে তাদের মধ্যে পার্থক্য কী?
উত্তর:
হিসাবে একটি ফাংশন চিহ্নিত করা async
বা async*
এটি ব্যবহার করতে async
/ await
কীওয়ার্ড ব্যবহার করার অনুমতি দেয় Future
।
উভয়ের মধ্যে পার্থক্য হ'ল async*
সর্বদা একটি Stream
প্রদান করে এবং yield
কীওয়ার্ডের মাধ্যমে কোনও মান নির্গত করতে কিছু সিনট্যাক্স চিনি সরবরাহ করে ।
সুতরাং আমরা নিম্নলিখিতটি করতে পারি:
Stream<int> foo() async* {
for (int i = 0; i < 42; i++) {
await Future.delayed(const Duration(seconds: 1));
yield i;
}
}
এই ফাংশনটি প্রতি সেকেন্ডে একটি মূল্য প্রকাশ করে, যা প্রতিবার বৃদ্ধি হয়
async
আপনাকে দেয় Future
async*
আপনি যদি একটি দেয় Stream
।আপনি async
এমন কোনও কীওয়ার্ডটি এমন কোনও ফাংশনে যুক্ত করেন যা এমন কিছু কাজ করে যা আপনাকে অনেক সময় নিতে পারে। এটি একটি মোড়ানো ফল দেয় Future
।
Future<int> doSomeLongTask() async {
await Future.delayed(const Duration(seconds: 1));
return 42;
}
ভবিষ্যতের অপেক্ষায় আপনি সেই ফলাফলটি পেতে পারেন:
main() async {
int result = await doSomeLongTask();
print(result); // prints '42' after waiting 1 second
}
আপনি async*
একটি ক্রিয়াকলাপ তৈরি করতে কীওয়ার্ডটি যুক্ত করুন যা একবারে ভবিষ্যতের মানগুলির একগুচ্ছ ফিরে দেয়। ফলাফলগুলি একটি স্ট্রিমে আবৃত।
Stream<int> countForOneMinute() async* {
for (int i = 1; i <= 60; i++) {
await Future.delayed(const Duration(seconds: 1));
yield i;
}
}
এর জন্য প্রযুক্তিগত শব্দটি হ'ল অ্যাসিনক্রোনাস জেনারেটর ফাংশন । আপনি ফাংশনটি ছাড়ছেন না এর yield
পরিবর্তে return
আপনি কোনও মান ফেরত দেওয়ার জন্য ব্যবহার করেন।
আপনি await for
স্ট্রিম দ্বারা নির্গত প্রতিটি মানটির জন্য অপেক্ষা করতে ব্যবহার করতে পারেন ।
main() async {
await for (int i in countForOneMinute()) {
print(i); // prints 1 to 60, one integer per second
}
}
আরও জানার জন্য এই ভিডিওগুলি দেখুন, বিশেষত জেনারেটরের একটি:
Dart Documentation
পাশাপাশি একটি রেফারেন্সটি পড়ে ভাল