将参数传递给Task.StartNew而不使用匿名函数

时间:2015-10-29 12:44:02

标签: c# multithreading

我只是想学习线程,我想知道我们可以在创建线程时传递参数并使用返回值。我正在使用 Task.Factory.StartNew 创建线程。我只是想图没有匿名功能的东西。

有人可以帮助我更好地理解。我应该在这里使用代表吗? 下面是我想要使用的代码(仅用于学习目的,我不想使用匿名和lambda)。这可能吗?

using System;
using System.Threading.Tasks;

public class Example
{

    private static int printMessage(int c)
    {
        int ctr = c;
        for (ctr = 0; ctr <= 1000000; ctr++)
        { }
        return ctr;

    }

    public static void Main()
    {
        Task t = Task.Factory.StartNew(new Action(printMessage));

        t.Start();
        t.Wait();
        Console.WriteLine("The sum is: " + t.Result); 
        Console.ReadLine();
    }
}

1 个答案:

答案 0 :(得分:1)

是的,当然。您必须使用Func<object, T>并将c的值作为object传递。由于任务有结果,因此您应使用Task<int>代替Task

private static int printMessage(object c)
{
    int ctr = (int)c;
    for (ctr = 0; ctr <= 1000000; ctr++)
    { }
    return ctr;

}

public static void Main()
{
    Task<int> t = Task.Factory.StartNew(new Func<object, int>(printMessage), 1);

    t.Start();
    t.Wait();
    Console.WriteLine("The sum is: " + t.Result);
    Console.ReadLine();
}