অ্যাসিঙ্ক / অ্যাওয়েট বনাম থ্রেডস


101

নেট নেট 4.5 ইন মাইক্রোসফ্ট Async/Awaitঅ্যাসিনক্রোনাস কোডিং সহজ করার জন্য নতুন বৈশিষ্ট্য যুক্ত করেছে । যাইহোক, আমি অবাক

  1. Async/Awaitপুরানো ব্যবহারের পদ্ধতি সম্পূর্ণরূপে প্রতিস্থাপন করতে পারেন Threads?
  2. তাত্পর্যপূর্ণভাবে Async/Awaitযা কিছু Threadকরতে পারে তা করতে সক্ষম ?
  3. Async/Awaitশুধুমাত্র কিছু পদ্ধতির সাথেই ব্যবহার করা যেতে পারে WebClient.DownloadStringAsyncবা আমি কোনও সিঙ্ক্রোনাস পদ্ধতিটি ব্যবহার করতে Async/Awaitএবং মূল থ্রেডটি ব্লক না করে রূপান্তর করতে পারি ?

4
থ্রেড এবং অ্যাসিঙ্ক / অ্যাওয়েট সম্পর্কিত নয় এমন বৈশিষ্ট্য। আপনি এগুলি একত্রিত করতে পারেন, তবে আপনার দরকার নেই।
— dtb

4
আমি ভাবলাম যে অ্যাসিঙ্ক / আওয়েত একই কাজ করছে যা করছে new Thread(() => {Some Work}).Start();!? তাই না?
— রোমান র্যাটস্কি

4
নাহ। আপনার অনুমানটি সঠিক নয়। আপনি সম্ভবত টাস্ক.রুন (টিপিএল) এর কথা ভাবছেন যা প্রায়শই অ্যাসিঙ্ক / অ্যাওয়েটের সাথে মিলিত হয় তবে এটি সম্পর্কযুক্তও নয় এবং এটির সাথে এটি ব্যবহার করতে হবে না।
— dtb

4
@ ডিটিবি: সুতরাং কখন অ্যাসিঙ্ক / অ্যাওয়েট ব্যবহার করবেন এবং কখন থ্রেড ব্যবহার করবেন? টাস্ক.রুন, থ্রেড.স্টার্ট, অ্যাসিঙ্ক / অ্যাওয়েটের পার্থক্য সম্পর্কে আমি সত্যিই বিভ্রান্ত। আপনি যদি আমাকে একটি ভাল ব্যাখ্যা সরবরাহ করতে পারেন যা আমাকে তাদের মধ্যে পার্থক্যগুলি বুঝতে সাহায্য করে আমি খুব কৃতজ্ঞ
— রোমান র্যাটস্কি

4
অ্যাসিঙ্ক / প্রতীক্ষা তৈরি করে না বা অন্য কোনওভাবে থ্রেড ব্যবহার করে না।
— wRAR

উত্তর:


83

এটি থ্রেডগুলি ব্যবহার করার পুরানো পদ্ধতিটিকে পুরোপুরি প্রতিস্থাপন করতে পারে?

না। একটি থ্রেড আরও অনেক দরকারী জিনিস করতে পারে। প্রতীক্ষা বিশেষভাবে সঙ্গে মোকাবিলা করার জন্য ডিজাইন করা হয় কিছু সময় নিচ্ছে, সবচেয়ে সাধারণত কোনো I / O অনুরোধ। যা I / O অনুরোধটি সম্পূর্ণ হওয়ার পরে traditionতিহ্যগতভাবে একটি কলব্যাক দিয়ে করা হয়েছিল। এই কলব্যাকগুলির উপর নির্ভর করে কোড রচনা করা বেশ কঠিন, অপেক্ষারত এটিকে সহজতর করে।

থ্রেড অ্যাসিক্রোনারস করে কি করতে সক্ষম?

মোটামুটিভাবে অ্যাওয়েট কেবল বিলম্বের সাথে মোকাবিলা করার যত্ন নেয়, এটি অন্যথায় কোনও থ্রেড যা কিছু করে না। প্রতীক্ষিত অভিব্যক্তি , অপেক্ষার কীওয়ার্ডের ডানদিকে যা রয়েছে তা হল কাজটি হয়ে যায়। আদর্শভাবে এটি একেবারেই কোনও থ্রেড ব্যবহার করে না, এটি ড্রাইভারের অনুরোধ পোস্ট করে এবং ড্রাইভার যখন ডেটা স্থানান্তর সম্পূর্ণ করে এটি একটি সম্পূর্ণ বিজ্ঞপ্তি কলব্যাক উত্পন্ন করে। নেটওয়ার্কিং এখন পর্যন্ত সর্বাধিক প্রচলিত ব্যবহার, শত শত মিলিসেকেন্ডের বিলম্ব সাধারণ এবং পরিষেবার একটি অনিবার্য পার্শ্ব-প্রতিক্রিয়া ডেস্কটপ বা ল্যানকে "ক্লাউড" এ সরানো। এই ধরনের পরিষেবাগুলি সিঙ্ক্রোনালিভাবে ব্যবহার করা একটি ইউআইকে যথেষ্ট প্রতিক্রিয়াবিহীন করে তুলবে।

কেবল ওয়েবক্লিয়েন্টের মতো কিছু পদ্ধতি ব্যবহার করা যেতে পারে ownডাউনলোডস্ট্রিংএসিঙ্ক

না You আপনি কোনও টাস্ক ফেরত যে কোনও পদ্ধতিতে এটি ব্যবহার করতে পারেন। এক্সএক্সএক্সএক্সএন্সিঙ্ক () পদ্ধতিগুলি সময় নেয় এমন সাধারণ ক্রিয়াকলাপগুলির জন্য .NET কাঠামোর মধ্যে কেবল পূর্বনির্ধারিত। ওয়েব সার্ভার থেকে ডেটা ডাউনলোড করার মতো।


4
আধুনিক সি # দিকটিতে বাহ্যিক এপিআইগুলিতে অ্যাসিঙ্ক-কলব্যাকস অর্জনের জন্য সর্বোত্তম পন্থা কোনটি?
— BonCodigo

4
শেষ অনুচ্ছেদে আবৃত, একটি টাস্ক ব্যবহার করুন।
— হ্যানস প্যাস্যান্ট

আমি এমন কিছু প্রত্যাশা করব যা থ্রেড করতে পারে যা উদাহরণ হিসাবে অ্যাসিঙ্ক প্রোগ্রামিংয়ের মাধ্যমে করা যায় না।
— সা Saeedদ নেমতি

4
আপনি "একটি থ্রেড আরও অনেক দরকারী কাজ করতে পারেন" তে প্রসারিত করতে পারেন? থ্রেডগুলি সরবরাহ asyncকরা উপযুক্ত নয় যেগুলি অনুপযুক্ত understand
— বেঞ্জোহন

4
await Task.Runসিপিইউ-আবদ্ধ কাজের জন্য উল্লেখযোগ্য । যদি আমি সঠিকভাবে বুঝতে পারি তবে এটি কখনও কখনও সম্পাদিত হয় যা অন্যথায় কোনও থ্রেড বা পটভূমি কর্মী তৈরি করবে।
— টুলমেকারস্টেভ

16

এ বিষয়ে সরকারী বিবৃতি। যদিও অন্য বিষয়গুলির সাথে অন্ধভাবে একটি জিনিস প্রতিস্থাপন করার আগে আপনার থ্রেড এবং অ্যাসিনক্রোনাস প্রোগ্রামিংয়ের মধ্যে পার্থক্য বুঝতে হবে।


এটি থ্রেডস এবং অ্যাসিঙ্ক / অ্যাওয়েট সম্পর্কে স্পষ্ট এবং সংক্ষিপ্ত হিসাবে আমি প্রথম উত্সটি পড়েছি like
— আরমান বিমাটোভ

4
এই উত্তরে কেবলমাত্র ডকুমেন্টেশনের লিঙ্ক রয়েছে। লিঙ্কটি পুরানো হয়ে যেতে পারে উত্তরটিও পুরানো হতে পারে - বা আরও খারাপ - সম্পূর্ণ অকেজো। আমরা স্ট্যাক ব্যবহারকারীদের পরিবর্তে লিঙ্কগুলির প্রাসঙ্গিক অংশগুলি তাদের প্রশ্নের পরিবর্তে সরাসরি পোস্ট করতে উত্সাহিত করি।
— হিমব্রুমবিয়ার

4
দুঃখের বিষয়, সরকারী বিবৃতি কখন করবেন তা ব্যাখ্যা করে না await Task.Run। টাস্ক.রুন সম্পর্কে একটি সংক্ষিপ্ত উল্লেখ রয়েছে, তবে এটি পরিষ্কার নয়। নীচের লাইনটি awaitস্বয়ংক্রিয়ভাবে সমান্তরালভাবে কোনও সিপিইউ-আবদ্ধ টাস্কটি চালায় না, সুতরাং এই জাতীয় কাজটি সম্পন্ন করা উচিত await Task.Run।
— টুলমেকারস্টেভ

2

আমি এটি সম্পর্কে এইভাবে চিন্তা করি (এবং আমি মনে করি আপনি যদি https://docs.microsoft.com/en-us/pre स्पष्ट-versions/visualstudio/visual-studio-2012/hh191443(v=vs.110 দেখুন তবে মাইক্রোসফ্টও তা করে ) # থ্রেড )

মূল অ্যাপ্লিকেশন থ্রেডে কিছু কোড চালানোর জন্য অ্যাসিঙ্ক / অপেক্ষার দ্রুত উপায় হল এই সুবিধাটি যাতে কোডটি নিজেকে স্থগিত করতে পারে যখন তার কাজ করার কোনও কাজ না থাকে এবং মূল থ্রেডটিতে ফোকাস ফিরতে পারে, সেখানে থাকাকালীন মূল থ্রেডে "জেগে উঠুন" there প্রাপ্ত ফলাফল এবং তারপরে প্রক্রিয়াকরণটি আবার ফিরে যায় - আপনি এটি অনুমান করেছিলেন - মূল থ্রেড। এটিকে বেসিকের এমন একটি ইভেন্ট ভিত্তিক গোটো স্টেটমেন্টের মতো ভাবুন যা নিয়ন্ত্রণের একটি নির্দিষ্ট লাইনে পিছনে পিছনে যেতে পারে।

বিপরীতে একটি থ্রেড এক্সিকিউশনের একটি পৃথক প্রবাহ যা তার নিজস্ব ভেরিয়েবল ইত্যাদির সাথে চলতে পারে যেখানে - যথেষ্ট পরিমাণ হার্ডওয়্যার দেওয়া - মূল থ্রেডের সমান্তরালে কার্যকর হয়।

আপনার যদি কোনও জিইউআই অ্যাপ্লিকেশন থাকে যা কোনও একক ফাইল ডাউনলোড করতে চলেছে এবং তারপরে ডাউনলোড হওয়ার পরে সেই ফাইলটি দিয়ে কিছু করতে পারে - আমি এ্যাসিঙ্ক / অপেক্ষার পদ্ধতিটি ব্যবহার করে প্রয়োগ করব।

তবে যদি আপনার জিইউআইকে 5000 টি ফাইল ডাউনলোডের প্রয়োজন হয় - আমি হ্যান্ডল করার জন্য একটি ফাইল ডাউনলোড থ্রেড তৈরি করতাম যেহেতু ফাইলগুলি ডাউনলোড করার ক্ষেত্রে এক্সিকিউশন স্থানান্তরিত হওয়ার সময় প্রধান জিইউআই থ্রেড হিম হয়ে যেতে পারে।

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