আমার কয়েকটি অ্যাসিঙ্ক আরএসইটি পরিষেবা রয়েছে যা একে অপরের উপর নির্ভর করে না। এটি সার্ভিস 1 এর প্রতিক্রিয়ার "অপেক্ষা" করার সময়, আমি সার্ভিস 2, সার্ভিস 3 এবং আরও কল করতে পারি।
উদাহরণস্বরূপ, নীচে কোড দেখুন:
var service1Response = await HttpService1Async();
var service2Response = await HttpService2Async();
// Use service1Response and service2Response
এখন, এর service2Responseউপর নির্ভর করে না service1Responseএবং সেগুলি স্বাধীনভাবে আনা যায়। অতএব, দ্বিতীয় পরিষেবাটি কল করার জন্য আমার প্রথম পরিষেবাটির প্রতিক্রিয়াটির অপেক্ষার প্রয়োজন নেই।
আমি মনে করি না যে আমি Parallel.ForEachএখানে ব্যবহার করতে পারি কারণ এটি সিপিইউ বাউন্ড অপারেশন নয়।
এই দুটি অপারেশনকে সমান্তরালভাবে কল করার জন্য, আমি কী কল ব্যবহার করতে পারি Task.WhenAll? আমি যে সমস্যাটি ব্যবহার Task.WhenAllকরছি তা হ'ল এটি ফলাফল দেয় না। ফলাফল আনতে আমি কল করার task.Resultপরে কল করতে পারি Task.WhenAll, যেহেতু সমস্ত কাজ ইতিমধ্যে শেষ হয়ে গেছে এবং আমাদের আমাদের প্রতিক্রিয়া জানাতে হবে?
কোডের উদাহরণ:
var task1 = HttpService1Async();
var task2 = HttpService2Async();
await Task.WhenAll(task1, task2)
var result1 = task1.Result;
var result2 = task2.Result;
// Use result1 and result2
পারফরম্যান্সের ক্ষেত্রে এই কোডটি কি প্রথমটির চেয়ে ভাল? অন্য কোন পন্থা আমি ব্যবহার করতে পারি?
Parallel.ForEachনতুন থ্রেড তৈরি হবে যেখানে async awaitসমস্ত একক থ্রেডে করা হবে।
awaitপ্রস্তুত হওয়ার আগে প্রতিক্রিয়া ( ) ব্যবহার করার চেষ্টা করবে কেবল তখনই যুক্তিসঙ্গতভাবে ব্লক হয়ে যাবে ।
WhenAllকরার আগে করছিলাম Resultযে এটি আগে সমস্ত কাজ শেষ করে es ফলাফল বলা হয়। যেহেতু, টাস্ক.সিসল্ট কলিং থ্রেডটিকে অবরুদ্ধ করেছে, আমি অনুমান করি যে আমি যদি কাজগুলি প্রকৃতপক্ষে সম্পন্ন হওয়ার পরে কল করি তবে তা তাত্ক্ষণিকভাবে ফলাফল ফিরে পাবে। আমি বুঝতে বৈধতা চাই।
I do not think I can use Parallel.ForEach here since it is not CPU bound operation- আমি সেখানে যুক্তি দেখছি না। সংমেয় সম্মতি হয়।