2012-02-22 18 views
6

¿Existe alguna diferencia funcional entre estas para llamadas a funciones?Cierres y tareas

Método1:

public static void PrintMe(object obj) 
{ 
    Task task = new Task(() => 
    { 
     Console.WriteLine(obj.ToString()); 
    }); 
    task.Start(); 
} 

Método 2:

public static void PrintMe(object obj) 
{ 
    Task task = new Task((object arg) => 
    { 
     Console.WriteLine(arg.ToString()); 
    }, obj); 
    task.Start(); 
} 

Respuesta

9

El primero se pasa la variable obj a la tarea. El segundo pasa el valor de obj.

Para ver la diferencia asigna algo más a obj después de crear la tarea.

public static void PrintMe(object obj) 
{ 
    Task task = new Task(() => 
    { 
     Console.WriteLine(obj.ToString()); 
    }); 
    obj = "Surprise";   
    task.Start(); 
}