আমি ফ্লটার ফ্রেমওয়ার্ক ব্যবহার করে একটি আবেদন করছি। এই সময়ে আমি ডার্ট 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 আপনাকে দেয় Futureasync*আপনি যদি একটি দেয় 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পাশাপাশি একটি রেফারেন্সটি পড়ে ভাল