2012-02-22 10 views
6

Esiste una differenza funzionale tra queste funzioni e le chiamate.Chiusure e attività

Method1:

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

Method2:

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

risposta

9

Il primo passa la variabile obj al compito. Il secondo passa il valore dell'oggetto.

Per vedere la differenza, assegnare qualcos'altro a obj dopo aver creato l'attività.

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