使用Action 创建任务
我不知何故觉得我错过了一些基本的东西。 这是我的问题。
我正在尝试创建一个System.Threading.Tasks.Task实例来执行接受某种类型参数的操作。 我以为我可以做点什么
void DoWork(MyClass obj) {} //My action that accepts a parameter of type 'MyClass' MyClass obj = new MyClass(); Action action = DoWork; //action that points to the method Task task = new Task(action,obj); //task that would execute 'DoWork' with 'obj' as the parameter when I call Start.
显然这不会编译。 似乎我只能对一个任务使用Action
而不是Action
,然后在我的方法中将’object’强制转换为T.
如何才能最有效,最有效地实现我想要的目标?
您也可以直接使用:
MyClass obj = new MyClass(); Task task = Task.Run(() => DoWork(obj));
你可以用
Action
如果您使用的是.NET 4.0或更高版本,则可以使用Contravariance来实现您的目标,而无需引入新的委托
// INCORRECT代码,在运行时强制转换InvalidCastException 行动动作= DoWork; 任务任务=新任务((动作)动作,obj);
编辑:
感谢@svick指出,第二个选项是不正确的:我太忙了整理,无论是Action还是逆变(事实上它是逆变的,至少我是对的),我监督,在这种情况下我需要协方差 。
逆变意味着你可以做到
Action
没有明确的铸造。