C# 为什么它向我表明了这一点;无法从';无效';至';系统行动'&引用;
我不知道为什么不能使用“newaction(MyMethodA).Invoke()”作为StartNew的参数C# 为什么它向我表明了这一点;无法从';无效';至';系统行动'&引用;,c#,C#,我不知道为什么不能使用“newaction(MyMethodA).Invoke()”作为StartNew的参数 static void Main(string[] args) { Task t1 = Task.Factory.StartNew(new Action(MyMethodA).Invoke()); } 私有静态void MyMethodA() { 对于(int x=0;x
static void Main(string[] args)
{
Task t1 = Task.Factory.StartNew(new Action(MyMethodA).Invoke());
}
私有静态void MyMethodA()
{
对于(int x=0;x<100000;x++)
{
控制台写入线(“A-”+x);
}
}
尝试将代码更改为:
private static void MyMethodA()
{
for (int x = 0; x < 100000; x++)
{
Console.WriteLine("A - " + x);
}
}
您的代码正在尝试使用从方法返回的内容运行任务,这是无效的。这是因为
操作
对象上的调用
方法将返回用于构造它的方法的类型。在您的例子中是void
,这是因为.Invoke()
实际上调用并执行该方法。但是Task.Factory.StartNew
要求将Action
作为第一个参数传递。删除.Invoke()
将解决您的问题,这意味着您的代码如下所示:
taskt1=Task.Factory.StartNew(新操作(MyMethodA));
但是,这实际上不会启动您的任务,因为它只会创建它。以后您需要手动运行它。或者,如果您想立即创建并运行它,请使用Task
Task t1=Task.Run(MyMethodA)
请注意,我是如何省略了新操作(…)
,这是因为编译器足够聪明,能够自己解决问题您正在通过调用Invoke()
来调用该方法。此方法将返回由MyMethodA
指定的类型,因此无效。删除调用调用,它应该会工作感谢您回答我的问题。如果我删除Invoke(),它可以运行。但是没有打印出来。我只是发布了一个答案,包括为什么它没有打印出来,以及如何解决这个问题
Task task = Task.Run(MyMethodA);