有一种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));
但我觉得我错过了一些应该允许我以第一种方式去做的事情......
答案 0 :(得分:2)
Edit
方法组无法转换为Action<object>
。你可以做到
Action<MyType> act = Edit;
但Action<MyType>
和Action<object>
之间没有转化。如果有你能做的话
Action<object> act = Edit;
act("abc");
答案 1 :(得分:-1)
Task.Factory.StartNew的方法签名要求单参数Action&lt;&gt;,因此只需创建一个Action&lt;&gt;实例并在您的通话中使用它:
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);
你也可以使用lambda来内联这个(你注意到了):
Task.Factory.StartNew( () => Edit(x) );