এমএসডিএন-তে, থ্রেড.অবার্ট () পদ্ধতির বিবরণ বলে: "এই পদ্ধতিটি কল করা সাধারণত থ্রেডটি শেষ করে দেয়।"
কেন সবসময় নয়?
কোন ক্ষেত্রে এটি থ্রেডটি শেষ করে না?
থ্রেড বন্ধ করার অন্য কোনও সম্ভাবনা আছে কি?
এমএসডিএন-তে, থ্রেড.অবার্ট () পদ্ধতির বিবরণ বলে: "এই পদ্ধতিটি কল করা সাধারণত থ্রেডটি শেষ করে দেয়।"
কেন সবসময় নয়?
কোন ক্ষেত্রে এটি থ্রেডটি শেষ করে না?
থ্রেড বন্ধ করার অন্য কোনও সম্ভাবনা আছে কি?
উত্তর:
Thread.Abort()ThreadAbortExceptionথ্রেডটিতে একটি ইনজেকশন দেয়। থ্রেড কল করে অনুরোধ বাতিল করতে পারে Thread.ResetAbort()। এছাড়াও, কিছু কোড অংশ রয়েছে, যেমন finallyব্লক যা ব্যতিক্রম পরিচালনা করার আগে কার্যকর করা হবে। যদি কোনও কারণে থ্রেডটি এই জাতীয় ব্লকে আটকে থাকে তবে ব্যতিক্রম কখনও থ্রেডে উত্থাপিত হবে না।
কল করার সময় যেহেতু কলকারটির থ্রেডের অবস্থার উপর খুব কম নিয়ন্ত্রণ থাকে Abort()তাই সাধারণত এটি করা ভাল নয়। পরিবর্তে সমাপ্তির অনুরোধ করে থ্রেডে একটি বার্তা প্রেরণ করুন।
কোন ক্ষেত্রে এটি থ্রেডটি শেষ করে না?
এই প্রশ্নটি একটি সদৃশ।
থ্রেড.অবার্ট () ব্যবহার করে কী হয়েছে
থ্রেড বন্ধ করার মতো অন্য কোনও ইতিবাচকতা আছে কি?
হ্যাঁ. আপনার সমস্যাটি হ'ল আপনার এমন থ্রেড আর কখনও শুরু করা উচিত নয় যা আপনি বিনয়ের জন্য থামাতে বলতে পারবেন না এবং এটি একটি সময় মতো বন্ধ হয়ে যায়। আপনি যদি এমন পরিস্থিতিতে থাকেন যেখানে আপনাকে থ্রেড শুরু করতে হবে যা থামাতে (১) কঠিন, (২) বগি বা সবচেয়ে খারাপ (3) ব্যবহারকারীর সাথে বৈরিতা রয়েছে, তবে সঠিক কাজটি করা একটি নতুন প্রক্রিয়া, নতুন প্রক্রিয়াতে থ্রেডটি শুরু করুন এবং আপনি যখন থ্রেডটি নীচে নামতে চান তখন প্রক্রিয়াটি সমাপ্ত করুন । অপ্রয়োজনীয় থ্রেডের নিরাপদ সমাপ্তির গ্যারান্টি দিতে পারে এমন একমাত্র অপারেটিং সিস্টেম এর সম্পূর্ণ প্রক্রিয়াটি নিচে নেমে আসে।
আরও তথ্যের জন্য এই প্রশ্নের আমার অত্যধিক দীর্ঘ উত্তর দেখুন:
সি # এর একটি লুপের মধ্যে লক স্টেটমেন্ট ব্যবহার করা হচ্ছে
প্রাসঙ্গিক বিটটি হ'ল প্রান্তের শেষে যেখানে আপনি কোনও থ্রেডটি বাতিল করার আগে নিজেকে কোনও থ্রেডের জন্য অপেক্ষা করতে হবে সে সম্পর্কে কতটা বিবেচনা রয়েছে তা নিয়ে আলোচনা করছি।
কেন সবসময় নয়? কোন ক্ষেত্রে এটি থ্রেডটি শেষ করে না?
প্রারম্ভিকদের জন্য, একটি থ্রেড একটি ধরতে পারে ThreadAbortExceptionএবং তার নিজস্ব সমাপ্তি বাতিল করতে পারে । অথবা এটি এমন একটি গণনা সম্পাদন করতে পারে যা আপনি এটি বাতিল করার চেষ্টা করার সময় চিরতরে লাগে। এ কারণে রানটাইম গ্যারান্টি দিতে পারে না যে থ্রেডটি জিজ্ঞাসা করার পরে সর্বদা থ্রেডটি বন্ধ হয়ে যাবে।
ThreadAbortException আরো আছে:
কোনও থ্রেড নষ্ট করার জন্য যখন Abort পদ্ধতিতে কল করা হয়, তখন সাধারণ ভাষার রানটাইম একটি থ্রেডঅবর্টেক্সপশন নিক্ষেপ করে। থ্রেডআবার্ট এক্সসেপশন একটি বিশেষ ব্যতিক্রম যা ধরা যায় তবে এটি স্বয়ংক্রিয়ভাবে ক্যাচ ব্লকের শেষে আবার উত্থাপিত হবে। যখন এই ব্যতিক্রমটি উত্থাপিত হয়, রানটাইম থ্রেডটি শেষ করার আগে শেষ পর্যন্ত সমস্ত ব্লক সম্পাদন করে। যেহেতু থ্রেডটি শেষ অবধি ব্লকগুলিতে একটি সীমাহীন গণনা করতে পারে বা
Thread.ResetAbort()এই গর্ভপাতটি বাতিল করার আহ্বান জানায়, থ্রেডটি কখনই শেষ হবে তার কোনও গ্যারান্টি নেই।
Abort()ম্যানুয়ালি আপনার কোনও থ্রেড লাগবে না । সিএলআর আপনার জন্য সমস্ত নোংরা কাজ করবে যদি আপনি থ্রেডটিতে পদ্ধতিটি সহজভাবে ফিরে যান; এটি সাধারণত থ্রেডটি শেষ করবে।
যদি কোনও থ্রেড একটি লক ধরে থাকে এবং তাকে বাতিল / হত্যা করা হয় তবে কী হবে? সংস্থান আটকে আছে
এটি যখন থ্রেড কলগুলি নিজেই বাতিল হয়ে যায় তবে অন্য থ্রেডের দ্বারা না হয়ে কাজ করে। বাতিল, কার্যকরভাবে প্রভাবিত থ্রেডটি সমাপ্ত করে এমনকি যদি এটি তার কাজটি সম্পন্ন না করে এবং সংস্থানগুলি পরিষ্কার করার কোনও সুযোগ না দেয়
রেফারেন্স এমএসডিএন
আমি লুপের মধ্যে আটকে থাকা কোনও থ্রেডটি বাতিল করতে পারি না:
//immortal
Thread th1 = new Thread(() => { while (true) {}});
লুপের সময় ঘুমালে আমি থ্রেডটি বাতিল করতে পারি:
//mortal
Thread th2 = new Thread(() => { while (true) { Thread.Sleep(1000); }});
থ্রেডআবার্টস কোনও শেষ অবধি বা বিগিনিক্রিটিকাল রিজিওন এবং এন্ডক্রিটিক্যাল রিজিওনের মধ্যে ঘটবে না
ওটি: একটি বিস্তৃত, ভাষা-অজ্ঞান সম্পর্কিত, প্রশ্নোত্তর উপযোগী এবং কৌতুকপূর্ণ মজার ঘটনা সম্মতিতে গ্রহণ করুন, দেখুন ভার্টি স্টোব !
আমি থ্রেডটি অ্যাওর্ট () কল শুনতে খুব ব্যস্ত হয়ে পড়েছি, যার ফলস্বরূপ আমার কোডে থ্রেডঅবর্টিংএক্সেপশন ফেলে দেওয়া হয়।