আপনি আপনার প্রশ্নে বেশ কয়েকটি প্রশ্ন জিজ্ঞাসা করেছেন। আপনার চেয়ে আমি কিছুটা আলাদা করে ফেলব। তবে প্রথমে আমাকে সরাসরি প্রশ্নের উত্তর দিন।
আমরা সকলেই এমন একটি ক্যামেরা চাই যা হালকা ওজনের, উচ্চমানের এবং কম দামের, তবে এই প্রবাদটির মতোই, আপনি এই তিনটির মধ্যে কেবলমাত্র দুটি পেতে পারেন। আপনি এখানে একই পরিস্থিতিতে আছেন। আপনি একটি সমাধান চান যা কার্যকর, নিরাপদ এবং সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাস পাথের মধ্যে কোড ভাগ করে দেয়। আপনি কেবল তাদের মধ্যে দুটি পেতে যাচ্ছেন।
আমাকে কেন ভেঙে দিন। আমরা এই প্রশ্নটি দিয়ে শুরু করব:
আমি দেখেছি যে লোকেরা বলে যে আপনি GetAwaiter().GetResult()
একটি অ্যাসিঙ্ক পদ্ধতিতে ব্যবহার করতে পারেন এবং এটি আপনার সিঙ্ক পদ্ধতি থেকে প্রার্থনা করতে পারেন ? এই থ্রেড কি সব পরিস্থিতিতে নিরাপদ?
এই প্রশ্নের মূল বক্তব্যটি হ'ল "আমি কি সিঙ্ক্রোনাস পাথকে সহজলভ্য করে অ্যাসিক্রোনাস সংস্করণে একটি সুসংগত অপেক্ষা করতে পারি?"
আমাকে এই বিষয়টিতে সুস্পষ্টভাবে পরিষ্কার করা যাক এটি গুরুত্বপূর্ণ:
আপনি অবিলম্বে এই লোকদের কাছ থেকে যে কোনও পরামর্শ নেওয়া বন্ধ করে দিতে হবে ।
এটি চরম খারাপ পরামর্শ। অ্যাসিঙ্ক্রোনাস টাস্ক থেকে সিঙ্ক্রোনসিলে ফল আনা খুব বিপজ্জনক তবে যদি আপনার কাছে প্রমাণ না থাকে যে কাজটি স্বাভাবিকভাবে বা অস্বাভাবিকভাবে সম্পন্ন হয়েছে ।
এটি অত্যন্ত খারাপ পরামর্শের কারণটি হ'ল ভাল, এই দৃশ্যটি বিবেচনা করুন। আপনি লন কাঁচা কাটাতে চান তবে আপনার লন মাওয়ার ফলকটি নষ্ট হয়ে গেছে। আপনি এই কর্মপ্রবাহটি অনুসরণ করার সিদ্ধান্ত নিন:
- কোনও ওয়েবসাইট থেকে একটি নতুন ব্লেড অর্ডার করুন। এটি একটি উচ্চ-ল্যাটেন্সি, অ্যাসিনক্রোনাস অপারেশন।
- একযোগে অপেক্ষা করুন - অর্থাৎ আপনার ফলকটি হাতে না আসা পর্যন্ত ঘুমান ।
- ব্লেড এসেছে কিনা তা পর্যায়ক্রমে মেলবক্সটি পরীক্ষা করে দেখুন।
- বক্স থেকে ফলকটি সরান। এখন আপনি এটি হাতে আছে।
- মওয়ারে ফলকটি ইনস্টল করুন।
- ঘাস কাটা.
কি ঘটেছে? আপনি চিরদিনের জন্য ঘুমান কারণ মেলটি যাচাইয়ের ক্রিয়াকলাপটি এখন মেল আসার পরে ঘটে এমন কোনও কিছুতে প্রেরিত ।
এটা অত্যন্ত সহজ এই অবস্থায় ঢোকা যখন আপনি সিঙ্ক্রোনাস একটি অবাধ কাজের উপর অপেক্ষা করুন। সেই টাস্কটির ভবিষ্যতে থ্রেডের কাজ নির্ধারিত হতে পারে যা এখন অপেক্ষা করছে , এবং এখন সেই ভবিষ্যত কখনই আসবে না কারণ আপনি এটির জন্য অপেক্ষা করছেন।
আপনি যদি একটি অ্যাসিনক্রোনাস অপেক্ষা করেন তবে সবকিছু ঠিক আছে! আপনি পর্যায়ক্রমে মেলটি পরীক্ষা করে দেখুন এবং আপনি অপেক্ষা করার সময় আপনি একটি স্যান্ডউইচ তৈরি করেন বা আপনার করগুলি বা যা কিছু করেন; আপনি অপেক্ষা করার সময় আপনি কাজ করা চালিয়ে যান।
একযোগে অপেক্ষা করবেন না। যদি কাজটি করা হয় তবে এটি অপ্রয়োজনীয় । যদি কাজটি না করা হয় তবে বর্তমান থ্রেডটি চালিয়ে যাওয়ার সময় নির্ধারণ করা হয় তবে এটি অদক্ষ হয় কারণ বর্তমান থ্রেড অপেক্ষা করার পরিবর্তে অন্য কাজ চালিয়ে যেতে পারে। যদি কাজটি না করা হয় এবং বর্তমান থ্রেডে সময়সূচীটি চালানো হয় তবে এটি সুসংগতভাবে অপেক্ষা করতে ঝুলছে । আপনি ইতিমধ্যে টাস্কটি সম্পন্ন হয়েছে না জেনে না থাকলে আবার সমকালীনভাবে অপেক্ষা করার কোনও ভাল কারণ নেই ।
এই বিষয়ে আরও পড়ার জন্য, দেখুন
https://blog.stephencleary.com/2012/07/dont-block-on-async-code.html
স্টিফেন আমার চেয়ে বাস্তবের বিশ্বের পরিস্থিতি আরও ভালভাবে ব্যাখ্যা করেছেন।
এখন "অন্যান্য দিক" বিবেচনা করা যাক। আমরা কি অ্যাসিঙ্ক্রোনাস সংস্করণ তৈরি করে কোডটি ভাগ করে নিতে পারি কেবল কোনও কর্মী থ্রেডে সিঙ্ক্রোনাস সংস্করণটি?
যে সম্ভবত এবং প্রকৃতপক্ষে সম্ভবত নিম্নলিখিত কারণের জন্য একটি খারাপ ধারণা।
সিঙ্ক্রোনাস অপারেশন হাই-লেটেন্সি আইও কাজ করে থাকলে এটি অদক্ষ। এটি মূলত একজন শ্রমিককে নিয়োগ দেয় এবং কোনও কাজ শেষ না হওয়া পর্যন্ত সেই কর্মীকে ঘুমিয়ে দেয় । থ্রেডগুলি অত্যন্ত ব্যয়বহুল । তারা ডিফল্টরূপে সর্বনিম্ন এক মিলিয়ন বাইট অ্যাড্রেস স্পেস গ্রাস করে, তারা সময় নেয়, তারা অপারেটিং সিস্টেমের সংস্থান গ্রহণ করে; অকেজো কাজ করে আপনি কোনও সুতোর পোড়াতে চান না।
সুসংগত ক্রিয়াকলাপটি থ্রেড নিরাপদ হতে পারে না।
এটি যদি আরও দীর্ঘায়িত কাজটি প্রসেসরের সাথে আবদ্ধ হয় তবে এটি আরও যুক্তিসঙ্গত কৌশল, তবে যদি এটি হয় তবে আপনি সম্ভবত এটি কোনও শ্রমিকের থ্রেডে সরিয়ে দিতে চান না। আপনি যতটা সম্ভব সিপিইউতে সমান্তরালভাবে টাস্কের সমান্তরাল গ্রন্থাগারটি ব্যবহার করতে চান, আপনি সম্ভবত বাতিল করার যুক্তি চান, এবং আপনি সিঙ্ক্রোনাস সংস্করণটি সমস্ত কিছু করতে পারবেন না, কারণ এটি ইতিমধ্যে অ্যাসিনক্রোনাস সংস্করণ হবে ।
আরও পড়া; আবার, স্টিফেন খুব স্পষ্টভাবে এটি ব্যাখ্যা করেছেন:
টাস্ক.রুন ব্যবহার করবেন না কেন:
https://blog.stephencleary.com/2013/11/taskrun-etiquette-examples-using.html
টাস্কের জন্য আরও "করুন এবং করবেন না" পরিস্থিতি un
https://blog.stephencleary.com/2013/11/taskrun-etiquette-examples-dont-use.html
তাহলে কি আমাদের সাথে ছেড়ে যায়? কোড ভাগ করে নেওয়ার জন্য উভয় কৌশলই হয় ডেডলক বা বড় অদক্ষতা বাড়ে। আমরা যে সিদ্ধান্তে পৌঁছেছি তা হ'ল আপনাকে অবশ্যই একটি পছন্দ করা উচিত। আপনি কি এমন একটি প্রোগ্রাম চান যা দক্ষ এবং সঠিক এবং কলকারীকে আনন্দিত করে, বা আপনি কি সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস পাথের মধ্যে একটি অল্প পরিমাণে কোডটি নকল করে প্রবিষ্ট কিছু কীস্ট্রোক সংরক্ষণ করতে চান? তুমি দুটোই পাবে না, আমি ভয় পাচ্ছি।