在运行时创建并将方法的操作/委托传递给TaskFactory.StartNew方法

时间:2014-01-23 23:41:41

标签: c# reflection

我需要在运行时创建一个方法的action / delegate并将其传递给TaskFactory.Satrtnew方法。一般来说,当我知道要使用的方法时,我会做以下事情。

public void SomeService(CancellationToken cToken)
{   }

var tasks = new Task[] {
     Task.Factory.StartNew(() => SomeService(new CancellationToken())
};

就我而言,当我在运行时执行此操作时,我的方法名称来自配置文件。该方法存在,但它将在运行时分配给任务。我试过像

这样的东西
var conn = bll.daService.DbConnection;
var currentType = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType; 
var method = currentType.GetMethod("SomeService");

Action<CancellationToken> action = (Action<CancellationToken>)
   Delegate.CreateDelegate(typeof(Action<CancellationToken>),currentType,method);

Task.Factory.StartNew(action);

还有类似的东西。

delegate void ServiceDelegate(CancellationToken cToken);

ServiceDelegate serDel = (ServiceDelegate) 
    Delegate.CreateDelegate(currentType,method);

Action ac = serDel(new CancellationToken());

Task.Factory.StartNew(ac);

它们都不起作用。它会抛出不同类型的错误和异常。

编辑:以下行抛出异常“类型必须从委托派生”

ServiceDelegate serDel = (ServiceDelegate)
    Delegate.CreateDelegate(currentType,method)

1 个答案:

答案 0 :(得分:0)

这是一个类似的问题,其答案可以帮助你:

How to create a delegate from a MethodInfo?

HTH, 埃里克