C# ThreadStart返回值?

C# ThreadStart返回值?,c#,multithreading,C#,Multithreading,我正在重新分解一些遗留代码,并更新了下面ThreadStart语句中使用的Task.Execute方法,以便在其他上下文中使用。但是现在它会导致编译错误,即Task.Execute的返回类型错误 为什么会出现这种情况?我如何处理它,以便既保留返回值,又保留ThreadStart ThreadStart start = new ThreadStart(Task.Execute); Thread asyncThread = new Thread(start); asyncThread.IsBackg

我正在重新分解一些遗留代码,并更新了下面ThreadStart语句中使用的Task.Execute方法,以便在其他上下文中使用。但是现在它会导致编译错误,即Task.Execute的返回类型错误

为什么会出现这种情况?我如何处理它,以便既保留返回值,又保留ThreadStart

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

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

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

        return 1;
    }

    public static void ExecuteWrapper()
    {
        Execute();
    }
}
然后:


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

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

ThreadStart start = new ThreadStart(() => Task.Execute());
简单且短的包装(除非您想记住返回值):

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