Task.GetAwaiter().GetResult()
এটির উপরে পছন্দ হয় Task.Wait
এবং Task.Result
কারণ এটি ব্যতিক্রমগুলিকে একটি মুড়ে ফেলার পরিবর্তে প্রচার করে AggregateException
। যাইহোক, তিনটি পদ্ধতিই অচলাবস্থা এবং থ্রেড পুল অনাহার সংক্রান্ত সমস্যার সম্ভাবনা তৈরি করে। তাদের সকলের পক্ষে এড়ানো উচিত async/await
।
নীচের উক্তিটি ব্যাখ্যা করে যে কেন Task.Wait
এবং Task.Result
কেবলমাত্র Task.GetAwaiter().GetResult()
"খুব উচ্চমাত্রার সামঞ্জস্যের বারের কারণে" এর ব্যতিক্রম প্রচারের আচরণ থাকে না ।
যেমনটি আমি আগেই উল্লেখ করেছি যে আমাদের একটি খুব উচ্চতর সামঞ্জস্যতা বার রয়েছে এবং সুতরাং আমরা পরিবর্তনগুলি ভঙ্গ করতে এড়ানো করেছি've যেমন, Task.Wait
সর্বদা মোড়কের আসল আচরণ ধরে রাখে। তবে আপনি নিজেকে কিছু উন্নত পরিস্থিতিতে খুঁজে পেতে পারেন যেখানে আপনি নিযুক্ত সিঙ্ক্রোনাস ব্লকিংয়ের অনুরূপ আচরণ চান Task.Wait
তবে যেখানে আপনি মূল ব্যতিক্রমটিকে কোনও জায়গায় আবদ্ধ করার পরিবর্তে মোড়কানো প্রচার করতে চান AggregateException
। এটি অর্জন করতে, আপনি সরাসরি টাস্কের প্রতীক্ষককে লক্ষ্য করতে পারেন। আপনি যখন " await task;
" লেখেন , সংকলকটি সেই Task.GetAwaiter()
পদ্ধতির ব্যবহারে অনুবাদ করে , যা একটি GetResult()
পদ্ধতি রয়েছে এমন উদাহরণ দেয় । কোনও ত্রুটিযুক্ত টাস্কে ব্যবহার করা হলে, GetResult()
মূল ব্যতিক্রমটি প্রচার করবে (এভাবেই " await task;
" তার আচরণ পায়)। আপনি এইভাবে ব্যবহার করতে পারেন “task.GetAwaiter().GetResult()
”আপনি যদি সরাসরি এই প্রচারের যুক্তিটি উপস্থাপন করতে চান।
https://blogs.msdn.microsoft.com/pfxteam/2011/09/28/task-exception-handling-in-net-4-5/
" GetResult
" এর অর্থ আসলে "ত্রুটির জন্য কার্য পরীক্ষা করুন"
সাধারণভাবে, আমি একটি অ্যাসিক্রোনাস টাস্কে সুসংগতভাবে ব্লক করা এড়ানোর জন্য যথাসাধ্য চেষ্টা করি। যাইহোক, এমন কয়েকটি মুখ্য পরিস্থিতি রয়েছে যেখানে আমি সেই নির্দেশিকা লঙ্ঘন করি। এই বিরল পরিস্থিতিতে, আমার পছন্দের পদ্ধতিটি GetAwaiter().GetResult()
কারণ এটি একটিতে আবৃত না করে টাস্ক ব্যতিক্রমগুলি সংরক্ষণ করে AggregateException
।
http://blog.stephencleary.com/2014/12/a-tour-of-task-part-6-results.html
GetResult
: "এই ধরণের এবং এর সদস্যগণ সংকলক দ্বারা ব্যবহারের উদ্দেশ্যে for" অন্য ব্যক্তির এটি ব্যবহার করা উচিত নয়।