আমার কয়েকটি অ্যাসিঙ্ক আরএসইটি পরিষেবা রয়েছে যা একে অপরের উপর নির্ভর করে না। এটি সার্ভিস 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
- আমি সেখানে যুক্তি দেখছি না। সংমেয় সম্মতি হয়।