Task.Factory.StartNew((param,param2) => { Console.WriteLine("Test"); },
TaskCreationOptions.None);
错误1委托'System.Action'不带2个参数
我收到了上述错误。无法理解出了什么问题。
编辑:为什么它接受单个参数
Task.Factory.StartNew((param1) =>
{
for (int j = 0; j < 10; j++)
{
Console.WriteLine(string.Format("Task : {0}, outputing {1}- {2}",
param1, j.ToString(), param1));
}
}, string.Format("Tast Count " + ic++.ToString()));
答案 0 :(得分:2)
StartNew
需要Action
委托,其定义为:
public delegate void Action()
即,没有返回值且没有参数的方法。您正尝试将两个参数传递给操作:param
和param2
。
您的代码应如下所示:
Task.Factory.StartNew(() => { Console.WriteLine("Test"); });
// ^^ Note: no "param" or "param2".
此外,TaskCreationOptions
附加到自定义任务工厂,而不是默认任务工厂。
答案 1 :(得分:2)
Task.Factory.StartNew
方法several overloads。你在问题中提到的两个是:
Task.Factory.StartNew(Action, TaskCreationOptions)
Task.Factory.StartNew(Action<Object>, Object)
这些方法做了很多不同的事情。但是,注意事项是Action
和Action<object>
之间的差异。 Lambdas本质上是匿名方法,所以为了了解它们是什么,让我们将它们转换为方法签名。
Action -> void AnonymousMethod()
Action<object> -> void AnonymousMethod(object f)
Action<object, object> -> void AnonymousMethod(object f, object s)
在你的第一个没有编译的例子中,它等同于最后一个。 Task.Factory.StartNew
没有带有多个参数的重载。
答案 2 :(得分:1)
Task.Factory.StartNew
需要1个参数,System.Action
。
System.Action
封装没有参数但不返回的方法 值。
你试图通过外观传递两个参数?您没有将TaskCreationOptions.None传递给StartNew()。如果你确实想要传递选项(你没有,因为你正在使用'none'),你需要创建一个自定义任务工厂(将选项传递给它的构造函数)。