以下代码给出了以下错误 -
'System.Threading.Tasks.TaskFactory.StartNew(System.Func)'有一些 无效的参数
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
答案 0 :(得分:2)
'System.Threading.Tasks.TaskFactory.StartNew(System.Func)' 有一些无效的论点
您应该按照以下方式陈述新任务 -
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";
}
答案 1 :(得分:1)
要扩展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;
}
否则,您只需传递方法的名称并将其称为一天。