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