闭包和任务

Ver*_*rax 6 .net c# task-parallel-library

这些函数调用之间是否存在任何功能差异.

方法一:

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

方法2:

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

adr*_*anm 10

第一个将变量obj传递给任务.第二个传递obj.

要查看差异,请在创建任务后将其他内容分配给obj.

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