ডার্টে অ্যাসিঙ্ক এবং অ্যাসিঙ্ক * এর মধ্যে পার্থক্য কী?


92

আমি ফ্লটার ফ্রেমওয়ার্ক ব্যবহার করে একটি আবেদন করছি। এই সময়ে আমি ডার্ট asyncএবং এর কীওয়ার্ডগুলি পেয়েছিলাম async*। কেউ আমাকে বলতে পারেন যে তাদের মধ্যে পার্থক্য কী?

উত্তর:


122

হিসাবে একটি ফাংশন চিহ্নিত করা 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;
  }
}

এই ফাংশনটি প্রতি সেকেন্ডে একটি মূল্য প্রকাশ করে, যা প্রতিবার বৃদ্ধি হয়


4
আপনি যেখানে উদাহরণটি পেয়েছেন তা যুক্ত করা উচিত, Dart Documentationপাশাপাশি একটি রেফারেন্সটি পড়ে ভাল
লাগছে

4
@ Skizo-ozᴉʞS লিঙ্কটি মারা গেছে। এটিতে আমি যে সেরা ডকটি খুঁজে পেতে পারি তা হ'ল: ডার্ট.দেব / টিউটোরিয়ালস / ভাষা / স্ট্রিম
wdev

4
অ্যাসিঙ্ক * হিসাবে একটি ফাংশন চিহ্নিত করে আমরা ফলন কীওয়ার্ডটি ব্যবহার করতে এবং ডেটার স্ট্রিম ফিরিয়ে দিতে সক্ষম হয়েছি।
যশ

83

সংক্ষিপ্ত উত্তর

  • 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
  }
}

যাচ্ছে

আরও জানার জন্য এই ভিডিওগুলি দেখুন, বিশেষত জেনারেটরের একটি:


4
'এই ভিডিওগুলি দেখুন' - দুর্দান্ত আপনি যদি পাঠ্যসূচী রেফারেন্সও সরবরাহ করতে পারেন would প্রত্যেকেই ভিডিওর প্রতি অনুরাগী নয় ...
অ্যাকোনকাগুয়া

তাই নিখুঁত ব্যাখ্যা। আমি মুগ্ধ
রাউন প্যালিয়াম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.