আমার একটি বিদ্যমান প্রোগ্রামটি সংশোধন করতে হবে এবং এতে নিম্নলিখিত কোড রয়েছে:
var inputs = events.Select(async ev => await ProcessEventAsync(ev))
.Select(t => t.Result)
.Where(i => i != null)
.ToList();
তবে এটি আমার কাছে খুব অদ্ভুত বলে মনে হচ্ছে, সবার আগে async
এবং await
নির্বাচনের ক্ষেত্রে use স্টিফেন ক্লিয়ারির এই উত্তর অনুসারে আমার এগুলি ফেলে দেওয়া উচিত।
তারপরে দ্বিতীয়টি Select
ফলাফলটি নির্বাচন করে। এর অর্থ কি এই নয় যে টাস্কটি একেবারে অ্যাসিঙ্ক নয় এবং এটি সিঙ্ক্রোনাসিকভাবে সম্পাদিত হয় (কোনও কিছুর জন্য এত প্রচেষ্টা) না, বা টাস্কটি সংযোজনীয়ভাবে সম্পাদন করা হবে এবং যখন কাজটির বাকী কাজটি শেষ করা হবে তখন?
আমি কি স্টিফেন ক্লিয়ারির অন্য উত্তর অনুসারে নিম্নলিখিত কোডগুলি লিখতে চাই :
var tasks = await Task.WhenAll(events.Select(ev => ProcessEventAsync(ev)));
var inputs = tasks.Where(result => result != null).ToList();
এবং এটি কি পুরোপুরি একই রকম?
var inputs = (await Task.WhenAll(events.Select(ev => ProcessEventAsync(ev))))
.Where(result => result != null).ToList();
আমি এই প্রকল্পে কাজ করার সময় আমি প্রথম কোডের নমুনাটি পরিবর্তন করতে চাই তবে আমি অ্যাসিঙ্ক কোডটি পরিবর্তন করতে খুব আগ্রহী নই। হতে পারে আমি কেবল কোনও কিছুর জন্য উদ্বিগ্ন এবং সমস্ত 3 কোডের নমুনা ঠিক একই জিনিসটি করে?
প্রসেসিভেন্টসেন্যাসটি দেখতে এরকম দেখাচ্ছে:
async Task<InputResult> ProcessEventAsync(InputEvent ev) {...}
Task<InputResult>
সাথে InputResult
।
Select
নিজের কাজের আগে ফলাফলগুলি ভুলে গেছেন Where
।
Result
টাস্কের সম্পত্তি অ্যাক্সেস না করেই ফলাফল পেয়েছি