তাত্ত্বিকভাবে, এই কোডটি মারা উচিত :
ভাষার d.২ সংস্করণ হিসাবে, ডুবন্ত প্রসঙ্গে ব্যবহৃত স্টেট স্টেট স্টেটমেন্টটি স্বয়ংক্রিয়ভাবে একটি ব্যতিক্রম হ্যান্ডলার সংযুক্ত করবে। যদি প্রদত্ত কোডটিতে কোনও ব্যতিক্রম ঘটে থাকে তবে এটি মুদ্রিত হবে এবং প্রোগ্রামটি তখন প্রস্থান করবে, যদি কোনও প্রারম্ভিক জড়িত জড়িত ব্যতীত এটি ছুঁড়ে দেওয়া হয়।
use v6.c;
start { die }; sleep ⅓; say "hello"; # OUTPUT: «hello»
use v6.d;
start { die }; sleep ⅓; say "hello";
# OUTPUT:
# Unhandled exception in code scheduled on thread 4
# Died
# in block at -e line 1
এক্ষেত্রে এটি একটি অদ্ভুত পরিস্থিতি কারণ আপনি প্রতিশ্রুতিটি ডুবছেন না (আপনি এটি ফিরিয়ে দিচ্ছেন) তবে অবশেষে আপনি এটি ডুবে যাবেন কারণ আপনি এটি অকার্যকর প্রসঙ্গে চালাচ্ছেন।
একই ডকুমেন্টেশন আপনাকে সমাধান দেয়: প্রসঙ্গে ডুবে না:
# Don't sink it:
my $ = start { die }; sleep ⅓; say "hello"; # OUTPUT: «hello»
# Catch yourself:
start { die; CATCH { default { say "caught" } } };
sleep ⅓;
say "hello";
যেহেতু আপনার প্রোগ্রামটি মারা যায় না, তাই আমি বলব যে আপনি দ্বিতীয় পরিস্থিতিতে আছেন। কিছু কারণে, এটি ডুবে না। তবে পরিস্থিতি যা-ই হোক না কেন, সমাধান একই: আপনাকে একই কোড ব্লকের অভ্যন্তরে ব্যতিক্রম ধরা দরকার।
সমাধান: await
প্রতিশ্রুতি (যা এটি ডুবে না) বা এটি কিছু ভেরিয়েবলকে অর্পণ করে, যাতে পার্শ্ববর্তী কোডটিও মারা যায়। তবে আপনার ওপিকে সাড়া দিয়ে, না, আপনি অন্য থ্রেড থেকে একটি ব্যতিক্রম ধরতে পারবেন না, একইভাবে আপনি অন্য ব্লক থেকে ব্যতিক্রম ধরতে পারবেন না।
foo
এবংbar
এখানে কি নির্মূল করা যাবে?