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


17

আমি সি # বিকাশে নতুন এবং আরও প্রতিক্রিয়াশীল ইউআই তৈরি করতে চাই। আমার প্রাথমিক গবেষণায়, আমি এটি অর্জনের জন্য দুটি পদ্ধতি দেখেছি:

  1. ব্যাকগ্রাউন্ড ওয়ার্কার ক্লাসের সাথে একত্রে বহু-থ্রেডিং।
  2. নতুন অ্যাসিঙ্ক / অ্যাওয়েট সংশোধক।

নতুন মানে কি আরও ভাল? দুটি পদ্ধতির মধ্যে পার্থক্য কী? যদি আমি একটি নতুন প্রকল্প তৈরি করতে চাই, তবে আমি কোন পদ্ধতিটি অনুসরণ করব তা কীভাবে বেছে নেব?

সম্পাদনা: সম্ভবত আমার নির্দিষ্ট করা উচিত। আমি একটি উইন্ডোজ ফর্ম অ্যাপ্লিকেশন তৈরি করছি, যেখানে সমস্ত প্রয়োজনীয় ডেটা স্থানীয় ডিস্কে সেভ / লোড হবে। আমি বেশ কয়েকটি ইউএসবি ডিভাইসের সাথেও যোগাযোগ করব।


উত্তর:


10

আপনি ব্যবহার করে আপনার কার্য সম্পাদন করতে সক্ষম হবেন BackgroundWorker। এটি একটি সুপরিচিত শ্রেণী, এবং অনেক লোক এটি ব্যবহার করেছে।

নতুন সি # 5 asyncএবং awaitকীওয়ার্ডগুলি মূলত কেবল পঠনযোগ্য অ্যাসিঙ্ক্রোনাস কোডটি লেখা সহজ করে তোলে। এই কীওয়ার্ডগুলির পরিবর্তে কীভাবে বিভিন্ন কার্য সম্পাদন করা যায় তার কয়েকটি টিউটোরিয়াল এবং উদাহরণ থাকতে পারে BackgroundWorker

আপনার যদি সি # এর পুরানো সংস্করণ ব্যবহার না করা হয় তবে আমি কীভাবে ব্যবহার করব asyncএবং শিখার পরামর্শ দিই await


14

asyncএবং awaitকীওয়ার্ড তাদের নিজের উপর আপনার আবেদন আরো প্রতিক্রিয়াশীল করা হবে না। এগুলি কেবল কলিং এবং হ্যান্ডলিংয়ের পদ্ধতিগুলিকে তৈরি করে যা Taskবস্তুগুলিকে আরও সুবিধাজনক করে তোলে । ব্যাকগ্রাউন্ড থ্রেডগুলি তৈরি করতে async/ awaitব্যবহার করার জন্য আপনাকে এই জাতীয় জিনিসগুলির ব্যবহারের সাথে একত্রিত করতে হবে:

  • Task.Start()- ব্যবহার করে একটি প্রদত্ত টাস্ক শুরু করে TaskScheduler
  • পিনকিউ - সমান্তরালভাবে কয়েকটি ক্রিয়াকলাপ চালান, একটি কার্য প্রদান করে।
  • TaskCompletionSource- অ্যাসিঙ্ক কার্যগুলি পরিচালনা করার একটি কাস্টম উপায়। আমি এটি ব্যবহার করেছিলাম এমন একটি জায়গা হ'ল WebBrowserনিয়ন্ত্রণ থেকে আগত ইভেন্টগুলি পরিচালনা করতে ।
  • অন্যান্য asyncপদ্ধতি, যেমন উইন 8 এপিআইয়ের অনেকগুলি ফাংশন।

অন্য কথায়, async/ টাস্ক-ভিত্তিক অ্যাসিনক্রোনাস প্যাটার্নেরawait একটি এক্সটেনশন । আপনি এখানে প্রচুর নমুনা সহ একটি বিশাল হোস্টের সন্ধান করতে পারেন ।

এটি BackgroundWorkerহ'ল একটি উইনফর্মস উপাদান যা ইভেন্ট-ভিত্তিক অ্যাসিনক্রোনাস প্যাটার্নটি ব্যবহার করে 1 পটভূমি থ্রেড তৈরি করে এবং আপনি DoWorkইভেন্ট হ্যান্ডলারে আপনার নিজের কোড দিয়ে এই ব্যাকগ্রাউন্ড থ্রেডে করা কাজটি পপুলেট করতে পারেন । সাধারণভাবে, মাইক্রোসফ্ট আর এই প্যাটার্নটি ব্যবহার করার পরামর্শ দেয় না ( এখানে পৃষ্ঠার নীচের অংশটি দেখুন ), আপনি যদি ইতিমধ্যে এটি সম্পর্কে পরিচিত হন তবে এটি এখনও একটি সহজ বিকল্প হতে পারে।

উল্লিখিত না হওয়া অন্য একটি বিকল্পটি হ'ল .NET এর প্রতিক্রিয়াশীল এক্সটেনশনগুলি । এটি আপনার অ্যাপ্লিকেশনগুলিতে প্রতিক্রিয়া যোগ করার জন্য আর একটি দুর্দান্ত কাঠামো।


আপনি যখন উইন 8 এপিআই বলবেন, তখন কি উইন্ডোজ 7 (আমার টার্গেট প্ল্যাটফর্ম) এ অসিঙ্ক বৈশিষ্ট্যগুলি তেমন সমর্থিত নয়?
robert.ecot

1
হাই রবার্ট, উইন 8। নেট এপিআই ("মেট্রো"-স্টাইল অ্যাপ্লিকেশনগুলির জন্য) অ্যাসিঙ্ক ব্যবহার করে এবং ফাইল I / O থেকে ডায়ালগ বাক্সগুলি প্রদর্শন করা পর্যন্ত সমস্ত কিছুর জন্য অপেক্ষা করুন। অন্যান্য। নেট উপাদানগুলিতে, উদাহরণস্বরূপ, ফাইল স্ট্রিম, আপনি স্ট্রিম.আরএডএন্সিঙ্কের মতো পদ্ধতিতে অ্যাসিঙ্ক / অপেক্ষারত ব্যবহার করতে পারেন। উইন 8 এর বাইরেও কিছু সমর্থন রয়েছে।
কেভিন ম্যাককর্মিক

দুর্দান্ত, এবং আপডেট হওয়া লিঙ্কগুলির জন্যও ধন্যবাদ! খুব উপকারী.
robert.ecot

1
আমি সেই পৃষ্ঠায় এমন কিছু দেখতে পাচ্ছি না যা ইঙ্গিত করে যে BackgroundWorkerবিশেষত এর বিরুদ্ধে প্রস্তাবিত হয়েছে।
ক্যারলেসা

আমিও পাঠ সুপারিশ এসিঙ্ক বনাম BackgroundWorker এবং ব্লগ পোস্ট সিরিজ সম্পর্কে C # কংকারেন্ট প্রোগ্রামিং স্পষ্টত স্তিফানের, ও'রেলি দ্বারা প্রকাশিত omonymous বইয়ের লেখক।
সেনটেনজা

3

আমি এটি বলব async- এর awaitচেয়ে অনেক বেশি নমনীয় BackgroundWorker। আর তুমি এমন কিছু বিষয় যা তড়কা কাজ করতে চান যদি BackgroundWorkerতোমাদের সঙ্গে এটা করতে পারেন async- awaitখুব, আরো পাঠযোগ্য এবং আরো টাইপ-নিরাপদ কোড সহ।

যে কারণে, আমি মনে করি আপনি ব্যবহার করা উচিৎ async- awaitউপর BackgroundWorker

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