我需要在运行时创建一个方法的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)