ThreadStart的返回值?

时间:2011-08-23 16:10:15

标签: c# multithreading

我正在考虑一些遗留代码,并且我已经更新了下面的ThreadStart语句中使用的Task.Execute方法,以便在另一个上下文中使用。但是现在它导致编译错误,说Task.Execute的返回类型错误。

为什么会这样,我如何解决这个问题,以便保留我的返回值以及ThreadStart?

ThreadStart start = new ThreadStart(Task.Execute);
Thread asyncThread = new Thread(start);
asyncThread.IsBackground = true;
asyncThread.Start();

3 个答案:

答案 0 :(得分:4)

ThreadStart的返回类型为void,因此您必须传递返回void的方法。如果Task.Execute为非void,则可以使用lambda表达式:

ThreadStart start = new ThreadStart(() => Task.Execute());

答案 1 :(得分:3)

您需要为Execute方法编写一个不返回值的包装器,因为ThreadStart委托需要一个void返回类型的方法:

public static class Task
{
    public static int Execute()
    {
        //blah blah blah

        return 1;
    }

    public static void ExecuteWrapper()
    {
        Execute();
    }
}

然后:

ThreadStart start = new ThreadStart(Task.ExecuteWrapper);
Thread asyncThread = new Thread(start);
asyncThread.IsBackground = true;
asyncThread.Start();

但是可以安全地忽略返回值吗?这经常指出设计问题。

答案 2 :(得分:0)

简单和短包装(除非你想记住返回值):

ThreadStart start = new ThreadStart(() => { Task.Execute(); });
...