আমার অ্যাসিঙ্ক টাস্ক লাইব্রেরিটি কি চুপচাপ ব্যতিক্রমগুলি গ্রাস করবে?


10

আমি সবেই শিখেছি যে .NET 4.5 একটি অভ্যন্তরের ব্যতিক্রমগুলি কীভাবে Taskপরিচালিত হয় তার পরিবর্তনের জন্য প্রবর্তন করেছিল । যথা, তারা চুপচাপ দমন করা হয়।

কেন এটি করা হয়েছিল তার জন্য সরকারী যুক্তিটি "" আমরা অনভিজ্ঞ বিকাশকারীদের সাথে আরও বন্ধুত্বপূর্ণ হতে চাই "বলে মনে হয়:

নেট ET.৪-এ, টাস্কগুলির .NET 4-এর চেয়ে উল্লেখযোগ্য পরিমাণে বেশি খ্যাতি রয়েছে, কারণ তারা ভাষা দ্বারা সমর্থিত নতুন অ্যাসিঙ্ক বৈশিষ্ট্যগুলির অংশ হিসাবে সি # এবং ভিজ্যুয়াল বেসিক ভাষাগুলিতে বেকড রয়েছে। এটি কার্যত অভিজ্ঞ বিকাশকারীদের ডোমেনের বাইরে থাকা কার্যগুলিকে প্রত্যেকের রাজ্যে নিয়ে যায়। ফলস্বরূপ, এটি ব্যতিক্রম হ্যান্ডলিংয়ের আশেপাশে কতটা কঠোর হতে হবে সে সম্পর্কে নতুন সেট ট্রেড অফকে নিয়ে যায়।

( উত্স )

আমি বিশ্বাস করতে শিখেছি যে .NET এর অনেকগুলি সিদ্ধান্তই লোকেরা নিয়েছিল যারা সত্যই জানে যে তারা কী করছে এবং তাদের সিদ্ধান্ত নেওয়ার পিছনে সাধারণত খুব ভাল কারণ থাকে। কিন্তু এই একজন আমাকে পালাতে পারে।

যদি আমি আমার নিজস্ব অ্যাসিঙ্ক টাস্ক লাইব্রেরি ডিজাইন করছিলাম তবে ফ্রেমওয়ার্কের বিকাশকারীরা যে দেখছেন না তা ব্যতিক্রম গিলে ফেলার সুবিধা কী?


4
+1 টি। ভাল প্রশ্ন, আপনি যে ব্যতিক্রমগুলি পরিচালনা করতে পারবেন না তা প্রচার না করা এমনকী অ্যাসিঙ্ক্রোনাস প্রসঙ্গেও একটি খারাপ অভ্যাস। এছাড়াও, অনভিজ্ঞ ডেভেলপারদের সম্পর্কে যুক্তিটি বেশ লম্বা, আইএমএইচও। কোনও কোডের টুকরো যা কেবল কাজ করে না, তবে ব্যতিক্রমগুলি ছুঁড়ে ফেলেছে তার চেয়ে নতুন কি আর বিশ্রী হবে?
আর্সেনি মরজেনকো

@ মাইনমা ​​ঠিক আমার চিন্তাভাবনাগুলি, তবে আমি এর আগে ভুল ছিলাম (যখন দেখা গেল যে তারা আসলে খুব ভাল তবে স্পষ্ট কারণ প্রকাশ করেছিল), তাই আমি ভেবেছিলাম আমি জিজ্ঞাসা করব।
রোমান স্টারকভ

2
বাহ, আমি আপনাকে প্রথম পোস্ট করার কারণেই এটি পোস্ট করেছি বলে আমি আনন্দিত; এবং এটি স্পষ্টভাবে পোলাকে লঙ্ঘন করে । আপনি ঠিক বলেছেন যে এই ছেলেরা যদিও তারা করছে তা সত্যিই আমি জানতে আগ্রহী, তাই এর পিছনে কী যুক্তি থাকতে পারে তা আমি আন্তরিকভাবে জানতে আগ্রহী ... আশ্চর্য হ'ল যদি এটি অ্যাসিঙ্ক বাস্তবায়নের উপর ভিত্তি করে আরও প্রযুক্তিগত কারণ পেয়ে থাকে এবং ব্যতিক্রমগুলি কীভাবে প্রচার করবে W যেমন নিচের হচ্ছে .. একটি coroutine প্রেরণ
জিমি Hoffa

উত্তর:


2

এটির মূল্যের জন্য, আপনি যে ডকুমেন্টটি সংযুক্ত করেছেন এটি ন্যায়সঙ্গত হিসাবে একটি উদাহরণ কেস দেয়:

Task op1 = FooAsync(); 
Task op2 = BarAsync(); 
await op1; 
await op2;

এই কোডে, বিকাশকারী সমান্তরালভাবে চলার জন্য দুটি অ্যাসিনক্রোনাস অপারেশন চালু করছে এবং তারপরে অপেক্ষাকৃতভাবে নতুন প্রতীক্ষিত ভাষার বৈশিষ্ট্যটি ব্যবহার করে প্রতিটিটির জন্য অপেক্ষা করছে ... [সি] অনসাইডার যদি অপ 1 এবং অপ 2 অপূর্ণতা উভয় হয় তবে কী হবে। অপেক্ষারত অপ্ট 1 অপ্ট 1 এর ব্যতিক্রম প্রচার করবে এবং অতএব op2 কখনই অপেক্ষা করা হবে না। ফলস্বরূপ, অপ 2 এর ব্যতিক্রম পর্যবেক্ষণ করা হবে না এবং প্রক্রিয়াটি শেষ পর্যন্ত ক্রাশ হবে।

টাস্কের উপর ভিত্তি করে অ্যাসিক্রোনাস কোড লেখার জন্য বিকাশকারীদের পক্ষে এটি আরও সহজ করার জন্য, .NET 4.5 অরক্ষিত ব্যতিক্রমগুলির জন্য ডিফল্ট ব্যতিক্রম আচরণ পরিবর্তন করে। যদিও অরক্ষিত ব্যতিক্রমগুলি এখনও UnobidedTaskException ইভেন্টটি উত্থাপিত করবে (এটি না করা একটি ব্রেকিং পরিবর্তন হতে পারে), প্রক্রিয়াটি ডিফল্টভাবে ক্রাশ হবে না। পরিবর্তে, ইভেন্ট উত্থাপিত হওয়ার পরে ব্যতিক্রমটি শেষ হয়ে যাবে, কোনও ইভেন্ট হ্যান্ডলার ব্যতিক্রমটি পর্যবেক্ষণ করে না।

আমি এর দ্বারা নিশ্চিত নই। এটি একটি দ্ব্যর্থহীন, তবে ত্রুটিটি সনাক্ত করা কঠিন (রহস্যজনক প্রোগ্রাম ক্র্যাশ যা প্রকৃত ত্রুটির পরে অনেক পরে ঘটতে পারে) সরিয়ে দেয়, তবে এটি সম্পূর্ণ নিঃশব্দ ত্রুটির সম্ভাবনার সাথে প্রতিস্থাপন করে - যা সমস্যাটি পরে সনাক্ত করা সমান শক্ত হয়ে উঠতে পারে আপনার প্রোগ্রামে চালু এটি আমার কাছে সন্দেহজনক পছন্দ বলে মনে হচ্ছে।

আচরণটি কনফিগারযোগ্য - তবে অবশ্যই, 99% বিকাশকারী কেবল ডিফল্ট আচরণ ব্যবহার করতে চলেছেন, কখনও এই সমস্যাটি নিয়ে ভাবেন না। সুতরাং তারা ডিফল্ট হিসাবে যা বেছে নিয়েছে তা বড় বিষয়।


কিন্তু আপনি কি জন্য একটি স্বাভাবিক ব্যতিক্রম পেতে op1, ঠিক? তাহলে যে এক দেহাবশেষ Unhandled, এটা হবে সঠিক প্রক্রিয়া নিচে আনতে?
টিমউই

1
@ টিমউই, যেমনটি আমি এটি বুঝতে পারি, op1এর ব্যতিক্রম বা op2এর ব্যতিক্রমও এই প্রোগ্রামটিকে কমিয়ে আনবে না। সুবিধাটি হ'ল আপনার উভয়কেই পর্যবেক্ষণ করার সুযোগ রয়েছে। তবে আপনি যদি তা না করেন তবে উভয়কেই গ্রাস করা হবে। যদিও আমি ভুল হতে পারি।

আমি সত্যিই অবাক হয়েছি যে তারা আপনাকে উভয়কে "পর্যবেক্ষণ" করতে দেওয়া এত গুরুত্বপূর্ণ মনে করেছে। আপনি যদি তাদের "পর্যবেক্ষণ" করতে চান, আপনি তাদের ধরে ফেলুন এবং টাস্ক রেজাল্টের মাধ্যমে তাদের উপস্থিতির খবর দিন! ... আপনার যুক্তির সাথে সম্মত হন, +1
রোমান স্টারকভ

2

টিএল; ডিআর - না , আপনি কেবল চুপচাপ ব্যতিক্রম উপেক্ষা করবেন না।


অনুমানগুলি দেখুন।

  • আপনার অন্ধ বিশ্বাস

আমি বিশ্বাস করতে শিখেছি যে .NET এর অনেকগুলি সিদ্ধান্তই লোকেরা নিয়েছিল যারা সত্যই জানে যে তারা কী করছে এবং তাদের সিদ্ধান্ত নেওয়ার পিছনে সাধারণত খুব ভাল কারণ থাকে। কিন্তু এই একজন আমাকে পালাতে পারে।

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

আমার বক্তব্য, যদি আপনার প্রবৃত্তি আপনাকে কিছু ভুল হতে পারে তবে এটির জন্য খুব ভাল সুযোগ (এবং অতীতের নজির) রয়েছে।

  • এটি একটি প্রযুক্তিগত সমস্যা

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

এবং শেষ ব্যবহারকারী এবং বিকাশকারীদের মধ্যে এই অনুমানমূলক কথোপকথনটি বিবেচনা করুন।

ব্যবহারকারী: অ্যাপ্লিকেশনটি নষ্ট হয়ে গেছে।
দেব: কি ভেঙে গেছে?
ব্যবহারকারী: আমি জানি, আমি বোতামে ক্লিক করি এবং কিছুই হয় না।
দেব: আপনি কি বলতে চাইছেন কিছুই হয় না?
ব্যবহারকারী: দেখুন, আমি ক্লিক করি, আমি অপেক্ষা করি, এবং আমি অপেক্ষা করি এবং আমি অপেক্ষা করি এবং কিছুই না ... এটি স্পষ্টতই নষ্ট হয়ে গেছে।

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

এবং দয়া করে নোট করুন যে আমি সেখানে বেশ কয়েকটি সম্ভাব্য ত্রুটিযুক্ত পথগুলি দেখেছি।


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

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

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

সুতরাং আমার শেষ মূল্যায়নটি হ'ল লোকেরা একটি অ্যাসিক্রোনাস মডেলকে চাপ দেওয়ার মাধ্যমে তৈরি হওয়া কোনও সমস্যার সমাধানের জন্য এটি অর্ধ-বেকড প্রচেষ্টা যখন তারা তাদের চিন্তাধারা সেই পদ্ধতির দিকে বদলানোর জন্য প্রস্তুত ছিল না।

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