আমি কিছু অ্যাসিঙ্ক ফাংশন সহ একটি ইন্টারফেস পেয়েছি।
পদ্ধতিগুলি ফিরছে Task
, আমি বিশ্বাস করি।async
এটি একটি বাস্তবায়ন বিশদ, সুতরাং এটি ইন্টারফেস পদ্ধতিতে প্রয়োগ করা যায় না।
ইন্টারফেস প্রয়োগ করে এমন কিছু শ্রেণীর জন্য অপেক্ষা করার মতো কিছু নেই, এবং কিছু কিছু কেবল ফেলে দিতে পারে।
এই ক্ষেত্রে, আপনি async
বাস্তবায়নের বিশদ এটির সুযোগটি নিতে পারেন ।
আপনার যদি কিছু না থাকে await
তবে আপনি কেবল ফিরে আসতে পারেন Task.FromResult
:
public Task<int> Success() // note: no "async"
{
... // non-awaiting code
int result = ...;
return Task.FromResult(result);
}
নিক্ষেপের ক্ষেত্রে NotImplementedException
, পদ্ধতিটি আরও কিছুটা স্পষ্ট:
public Task<int> Fail() // note: no "async"
{
var tcs = new TaskCompletionSource<int>();
tcs.SetException(new NotImplementedException());
return tcs.Task;
}
আপনার যদি নিক্ষেপ করার প্রচুর পদ্ধতি থাকে NotImplementedException
(যা নিজেই ইঙ্গিত দিতে পারে যে কিছু নকশা-স্তরের রিফ্যাক্টরিং ভাল হবে), তবে আপনি শব্দবন্ধকে একটি সহায়ক শ্রেণিতে গুটিয়ে রাখতে পারেন:
public static class TaskConstants<TResult>
{
static TaskConstants()
{
var tcs = new TaskCompletionSource<TResult>();
tcs.SetException(new NotImplementedException());
NotImplemented = tcs.Task;
}
public static Task<TResult> NotImplemented { get; private set; }
}
public Task<int> Fail() // note: no "async"
{
return TaskConstants<int>.NotImplemented;
}
সহায়ক শ্রেণিও জিসিকে অন্যভাবে সংগ্রহ করতে হবে এমন আবর্জনা হ্রাস করে, যেহেতু একই রিটার্ন টাইপের প্রতিটি পদ্ধতি তার ভাগ করতে পারে Task
এবংNotImplementedException
বিষয়গুলি পারে।
আমার এ্যাসএনএক্সএক্স লাইব্রেরিতে আমার কাছে আরও কয়েকটি "টাস্ক ধ্রুবক" টাইপের উদাহরণ রয়েছে ।