Uzun çalışma yöntemleri ile uğraşırken özel olarak çöp toplama basıncını önlemek için satır içi işlevler kullanıyorum. Diyelim ki, belirli bir sembol için 2 yıl veya piyasa verileri almak istersiniz. Ayrıca, gerekirse çok sayıda işlevsellik ve iş mantığı paketlenebilir.
birinin yaptığı şey, sunucuya bir soket bağlantısı açmak ve bir olayı bir olaya bağlayan veriler üzerinde döngü yapmaktır. Bir sınıf tasarlandığı gibi düşünülebilir, sadece bir tanesi gerçekten sadece bir işlevsellik pili için çalışan bir yerde yardımcı yöntemler yazmıyor. Aşağıda bu nasıl görünebilir bazı örnek, ben değişkenleri kullanıyorum ve "yardımcı" yöntemleri sonunda aşağıda olduğunu unutmayın. Sonunda güzelce olay işleyicileri kaldırmak, benim Exchange sınıf harici / enjekte olurdu ben herhangi bir bekleyen olay işleyicisi kayıtlı olmaz
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;
}
}
Aşağıda belirtildiği gibi avantajları görebilirsiniz, burada örnek bir uygulama görebilirsiniz. Umarım faydaları açıklamaya yardımcı olur.