Utilizo funciones en línea para evitar la presión de recolección de basura, especialmente cuando se trata de métodos de ejecución más largos. Digamos que a uno le gustaría obtener 2 años o datos de mercado para un símbolo de teletipo dado. Además, uno puede empacar mucha funcionalidad y lógica de negocios si es necesario.
lo que uno hace es abrir una conexión de socket al servidor y recorrer los datos que vinculan un evento a un evento. Uno puede pensarlo de la misma manera que se diseña una clase, solo uno no está escribiendo métodos auxiliares en todo el lugar que realmente solo funcionan para un nivel de funcionalidad. a continuación se muestra una muestra de cómo se vería esto, tenga en cuenta que estoy usando variables y los métodos "auxiliares" están debajo de finalmente. En Finalmente, elimino muy bien los controladores de eventos, si mi clase de Exchange fuera externa / inyectada, no tendría ningún controlador de eventos pendiente registrado
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;
}
}
Puede ver las ventajas que se mencionan a continuación, aquí puede ver una implementación de muestra. Espero que ayude a explicar los beneficios.