使用具有多个模板参数的Action启动任务

时间:2012-11-15 10:56:47

标签: c# multithreading templates task

我需要在C#中启动一个任务,所以我正在创建一个动作对象。

private Action<int, int, int> action = (int p1, int p2, int p3) =>
{
    // do some stuff with p1, p2 and p3.
};

然而,当我尝试从中创建任务时,我意识到new Task只能接受ActionAction<object>而拒绝接受我action的多个{{1}}模板化的论点。

您是否有任何想法如何创建此任务对象并让我传入args?

2 个答案:

答案 0 :(得分:5)

只需使用lambda转换为正确的委托类型:

Action<int, int, int> action = (int p1, int p2, int p3) =>
{
    // do some stuff with p1, p2 and p3.
};

//a closure can capture over any values you might want to pass in
Task.Run(() => action(1, 2, 3));

如果您考虑一下,则无法将Action<int, int, int>交给Task.Run,因为您还必须提供参数。 Task.Run 无法知道您要传递的内容。

答案 1 :(得分:-2)

如何为参数创建DTO类?


public class ParamDto
{
   public string Param1;
   .
   .
   .
}