আমি দীর্ঘকাল চলমান পদ্ধতির সাথে কাজ করার সময় বিশেষত আবর্জনা সংগ্রহের চাপ এড়াতে ইনলাইন ফাংশনগুলি ব্যবহার করি। বলুন যে কেউ একটি প্রদত্ত টিকার চিহ্নের জন্য 2 বছর বা বাজারের ডেটা পেতে চায়। এছাড়াও, যদি কারও প্রয়োজন হয় তবে অনেকগুলি কার্যকারিতা এবং ব্যবসায়িক যুক্তি প্যাক করতে পারে।
একটি যা করে তা হ'ল সার্ভারের সাথে সকেট সংযোগ খোলা এবং কোনও ইভেন্টকে ইভেন্টের সাথে আবদ্ধ করা ডেটা লুপ করে। ক্লাস ডিজাইনের মতো একইভাবে এটি ভাবতে পারে, কেবলমাত্র একজন পুরো জায়গা জুড়ে সহায়ক পদ্ধতি লিখছেন না যা কেবলমাত্র এক পিসের কার্যকারিতার জন্য কাজ করছে। এটি দেখতে কেমন হতে পারে তার কয়েকটি নমুনা নীচে দেওয়া হয়েছে, দয়া করে নোট করুন যে আমি ভেরিয়েবলগুলি ব্যবহার করছি এবং "সহায়ক" পদ্ধতিগুলি শেষ পর্যন্ত নীচে। পরিশেষে আমি ইভেন্ট হ্যান্ডলারগুলিকে খুব সুন্দরভাবে সরিয়ে দিই, যদি আমার এক্সচেঞ্জের ক্লাসটি বাহ্যিক / ইনজেকশনের হয়ে থাকে তবে আমার কোনও মুলতুবি ইভেন্ট হ্যান্ডলার নিবন্ধিত হবে না
void List<HistoricalData> RequestData(Ticker ticker, TimeSpan timeout)
{
var socket= new Exchange(ticker);
bool done=false;
socket.OnData += _onData;
socket.OnDone += _onDone;
var request= NextRequestNr();
var result = new List<HistoricalData>();
var start= DateTime.Now;
socket.RequestHistoricalData(requestId:request:days:1);
try
{
while(!done)
{ //stop when take to long….
if((DateTime.Now-start)>timeout)
break;
}
return result;
}finally
{
socket.OnData-=_onData;
socket.OnDone-= _onDone;
}
void _OnData(object sender, HistoricalData data)
{
_result.Add(data);
}
void _onDone(object sender, EndEventArgs args)
{
if(args.ReqId==request )
done=true;
}
}
নীচে উল্লিখিত হিসাবে আপনি সুবিধাগুলি দেখতে পারেন, এখানে আপনি একটি নমুনা বাস্তবায়ন দেখতে পারেন। আশা করি এটি সুবিধাগুলি ব্যাখ্যা করতে সহায়তা করে।