2012-02-22 13 views
6

これらの関数呼び出しには機能的な違いがありますか?クロージャとタスク

方法1:

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

方法2:

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

答えて

9

最初のタスクに objを変数を渡します。 2番目の値はobjの値を渡します。

違いを確認するには、タスクを作成した後にobjに他のものを割り当てます。

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