2

有一种Task.Factory.StartNew(Action<Object> action, Object state)方法。这看起来很一般。但是,如果我的“行动”是

protected void Edit(MyType myType) { }

为什么我不能

MyType x = something;
Task.Factory.StartNew(Edit, x);

我得到:

参数 1:无法从“方法组”转换为“System.Action”

我可以通过添加另一种方法来使其工作,

protected void Edit(object myType) { Edit((MyType)myType); }

或者我可以写

Task.Factory.StartNew(() => Edit(x));

但我觉得我错过了一些应该让我以第一种方式做到的东西......

4

2 回答 2

2

方法组Edit不可转换为Action<object>. 你可以做

Action<MyType> act = Edit;

Action<MyType>但是和之间没有转换Action<object>。如果有你可以做

Action<object> act = Edit;
act("abc");
于 2012-08-04T20:22:18.913 回答
-1

Task.Factory.StartNew 的方法签名要求单参数 Action<>,因此只需创建一个 Action<> 实例并在您的调用中使用它:

protected void Edit( Object myType ){ ... }

MyType x = something;
Action<Object> action = new Action<Object>(Edit);
Task.Factory.StartNew( action, x );

或者

Task.Factory.StartNew(new Action<Object>(Edit), x);

您也可以使用 lambdas 内联它(您已注意到):

Task.Factory.StartNew( () => Edit(x) );
于 2012-08-04T19:44:52.637 回答