如何解决 'System.Threading.Tasks.TaskFactory.StartNew(System.Func)' 有一些无效参数
How to solve 'System.Threading.Tasks.TaskFactory.StartNew(System.Func)' has some invalid arguments
以下代码给出了以下错误 -
'System.Threading.Tasks.TaskFactory.StartNew(System.Func)' has some
invalid arguments
public Task<string[]> SayHelloAsync()
{
Task<string> t1 = Task.Factory.StartNew<string>(GreetUser());
Task<string> t2 = Task.Factory.StartNew<string>(GreetCustomer());
Task.WhenAll(t1, t2);
}
private string GreetUser()
{
return "Hello";
}
private string GreetCustomer()
{
return "Namaste";
}
这是怎么回事。
我正在使用 ASP.Net MVC
'System.Threading.Tasks.TaskFactory.StartNew(System.Func)'
has some invalid arguments
您应该按照以下方式陈述新任务 -
Task.Factory.StartNew<string>(() => GreetUser());
总的来说,方法应该是这样的 -
public Task<string[]> SayHelloAsync()
{
Task<string> t1 = Task.Factory.StartNew<string>(() => GreetUser());
Task<string> t2 = Task.Factory.StartNew<string>(() => GreetCustomer());
return Task.WhenAll(t1, t2);
}
private string GreetUser()
{
return "Hi";
}
private string GreetCustomer()
{
return "Hi";
}
为了扩展 ramiramilu 的答案,如果您的 DoWork
方法是无参数的,您可以直接传递它,它也会起作用(请注意,您只需要传递方法,而不是调用方法)。
void StartWork()
{
var task = System.Threading.Tasks.Task.Factory.StartNew<string>(DoWork); //note, you're using "DoWork", not "DoWork()"!!!
}
string DoWork()
{
//do stuff
return "stuff";
}
仅当您的 DoWork
方法需要您希望从调用方法传递的输入参数时才需要使用 lambda 表达式。在这种情况下,您需要使用 lambda 表达式。
void StartWork()
{
var task = System.Threading.Tasks.Task.Factory.StartNew<string>(() => DoWork("my param"));
}
string DoWork(string myParams)
{
//do stuff
return myParams;
}
否则,您只需传递方法名称即可。
以下代码给出了以下错误 -
'System.Threading.Tasks.TaskFactory.StartNew(System.Func)' has some invalid arguments
public Task<string[]> SayHelloAsync()
{
Task<string> t1 = Task.Factory.StartNew<string>(GreetUser());
Task<string> t2 = Task.Factory.StartNew<string>(GreetCustomer());
Task.WhenAll(t1, t2);
}
private string GreetUser()
{
return "Hello";
}
private string GreetCustomer()
{
return "Namaste";
}
这是怎么回事。 我正在使用 ASP.Net MVC
'System.Threading.Tasks.TaskFactory.StartNew(System.Func)' has some invalid arguments
您应该按照以下方式陈述新任务 -
Task.Factory.StartNew<string>(() => GreetUser());
总的来说,方法应该是这样的 -
public Task<string[]> SayHelloAsync()
{
Task<string> t1 = Task.Factory.StartNew<string>(() => GreetUser());
Task<string> t2 = Task.Factory.StartNew<string>(() => GreetCustomer());
return Task.WhenAll(t1, t2);
}
private string GreetUser()
{
return "Hi";
}
private string GreetCustomer()
{
return "Hi";
}
为了扩展 ramiramilu 的答案,如果您的 DoWork
方法是无参数的,您可以直接传递它,它也会起作用(请注意,您只需要传递方法,而不是调用方法)。
void StartWork()
{
var task = System.Threading.Tasks.Task.Factory.StartNew<string>(DoWork); //note, you're using "DoWork", not "DoWork()"!!!
}
string DoWork()
{
//do stuff
return "stuff";
}
仅当您的 DoWork
方法需要您希望从调用方法传递的输入参数时才需要使用 lambda 表达式。在这种情况下,您需要使用 lambda 表达式。
void StartWork()
{
var task = System.Threading.Tasks.Task.Factory.StartNew<string>(() => DoWork("my param"));
}
string DoWork(string myParams)
{
//do stuff
return myParams;
}
否则,您只需传递方法名称即可。