¿Cuál es la diferencia entre los dos códigos siguientes? ¿Habrá algún problema usando el segundo?Enhebrado y expresiones lambda
Escenario 1:
private void Log(Exception e)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(Log), e);
}
private void Log(object obj)
{
Exception e = (Exception)obj;
Logger.Log(e);
}
Escenario 2
private void Log(Exception e)
{
ThreadPool.QueueUserWorkItem(
(obj) =>
{
Logger.Log(e);
});
}
En el escenario 2, no estoy pasando la excepción como un parametro a la ThreadPool. ¿Cómo se produce la distribución de subprocesos del objeto de excepción? ¿Habrá algún problema? ¿Cuáles son las limitaciones de hacer esto si es que hay alguno? La gran ventaja es que puede pasar cualquier número de parámetros muy fácilmente.
¿Existen implicaciones de rendimiento? –
Buena respuesta. De hecho, la expresión lambda genera un cierre (http://en.wikipedia.org/wiki/Closure_(computer_science)) para que la variable (puede ser más de uno en el caso general) se pueda referenciar en otro lugar. – Noldorin
@anon: No, no debería haber implicaciones de rendimiento hasta donde yo sé. – Noldorin