একটি সামান্য ব্যাকগ্রাউন্ড তথ্য।
আমি ওয়েব এপিআই স্ট্যাক শিখছি এবং আমি সাফল্য এবং ত্রুটি কোডের মতো পরামিতিগুলির সাথে "ফলাফল" অবজেক্টের আকারে সমস্ত ডেটা এমপ্যাপুলেট করার চেষ্টা করছি।
তবে বিভিন্ন পদ্ধতি বিভিন্ন ফলাফল এবং ত্রুটি কোড উত্পাদন করতে পারে তবে ফলাফল অবজেক্টটি একইভাবে ইনস্ট্যান্ট করা হবে।
কিছুটা সময় সাশ্রয় করতে এবং সি # তে অ্যাসিঙ্ক / দক্ষতার জন্য অপেক্ষা করার বিষয়ে আরও জানার জন্য, আমি আমার ওয়েব এপিআই ক্রিয়াকলাপের সমস্ত পদ্ধতি বডিগুলিকে একটি অ্যাসিঙ্ক্রোনাস অ্যাকশন প্রতিনিধিতে গুটিয়ে রাখার চেষ্টা করছি তবে কিছুটা ফাঁকে ধরা পড়ে ...
নিম্নলিখিত ক্লাস দেওয়া:
public class Result
{
public bool Success { get; set; }
public List<int> ErrorCodes{ get; set; }
}
public async Task<Result> GetResultAsync()
{
return await DoSomethingAsync<Result>(result =>
{
// Do something here
result.Success = true;
if (SomethingIsTrue)
{
result.ErrorCodes.Add(404);
result.Success = false;
}
}
}
আমি এমন একটি পদ্ধতি লিখতে চাই যা ফলাফল ফলাফলের উপর কোনও ক্রিয়া সম্পাদন করে তা ফিরিয়ে দেয়। সাধারণত সিঙ্ক্রোনাস পদ্ধতিগুলির মাধ্যমে এটি হত
public T DoSomethingAsync<T>(Action<T> resultBody) where T : Result, new()
{
T result = new T();
resultBody(result);
return result;
}
তবে কীভাবে আমি এই পদ্ধতিটি async / প্রতীক্ষা করে অ্যাসিক্রোনাস পদ্ধতিতে রূপান্তর করব?
এটি আমি চেষ্টা করেছি:
public async Task<T> DoSomethingAsync<T>(Action<T, Task> resultBody)
where T: Result, new()
{
// But I don't know what do do from here.
// What do I await?
}
Stream.ReadAsync()
সেই পদ্ধতিটি নিজেই অবিচ্ছিন্ন হওয়া উচিত এবং আপনি Task<T>
যেখানে T
ফিরে এসেছিলেন সেখানে পদ্ধতিটি সমকালীন হবে return ধারণাটি হ'ল এইভাবে, আপনার পদ্ধতির প্রত্যেক কলার অন্তর্নিহিতটি Stream.ReadAsync()
সম্পূর্ণ করার জন্য "অবিচ্ছিন্নভাবে অপেক্ষা করুন" (এটির জন্য ভাল শব্দটি কী তা আমি জানি না) can আপনি যেটির জন্য এটি ব্যবহার করতে পারেন তার একটি রূপক হ'ল অ্যাসিঙ্কটি "সংক্রামক" এবং নিম্ন-স্তরের অন্তর্নির্মিত আই / ও থেকে অন্য কোডে ছড়িয়ে পড়ে যার ফলাফলগুলি I / O এর উপর নির্ভর করে।
new
আপ-আপ করেT
থাকেন তবে আপনার পদ্ধতিটি কেন অ্যাসিঙ্ক্রোনাস হওয়া দরকার? অ্যাসিঙ্ক্রোনাস এপিআই ব্যবহার করে কোডে আফাইক , আপনার কেবলasync
অন্য ব্যবহারের পদ্ধতিগুলি থেকে নীড় প্রচার করতে হবে।