2012-02-22 16 views
6

Czy istnieje jakaś różnica funkcjonalna między nimi dla wywołań funkcji.Zamknięcia i zadania

Metoda 1:

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

Metoda 2:

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

Odpowiedz

9

Pierwszy przechodzi zmiennej obj zadania. Drugi przekazuje wartość wartości obj.

Aby zobaczyć różnicę, należy przypisać obiektowi coś innego po utworzeniu zadania.

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