(个人学习贴,如有问题请大神指出)
Task的参数有两种,一种是Action,一种是Func。
启动任务时, 会创建Task类的一个实例, 利用Action或Action委托(不带参数或带一个object参数)
class Program
{
//声明委托
delegate void Fun();
//函数 fun1
static void fun1()
{
Console.WriteLine("Fun1");
}
//函数 fun2
static void fun2(object s)
{
Console.WriteLine(s.ToString());
}
static void Main(string[] args)
{
{
//Action
Fun Fun1 = fun1;
Task.Factory.StartNew(new Action(Fun1));
//lambda表达式
Task.Run(() => { fun1(); });
//匿名函数
Fun fun3 = delegate()
{
Console.WriteLine("Fun3");
};
Task.Run(() => { fun3(); });
}
{
// Action<object>
Task.Factory.StartNew(fun2,"fun2");
Task.Run(() => { fun2("fun2"); });
}
Console.ReadKey();
}
}
Run方法没有可以传递Action委托的重载版本, 但是通过传递Action类型的lambda表达式并在其实现中使用参数
参数为Func时
public static int FFF(object a)
{
Console.WriteLine(a);
return 0;
}
var s = Task<int>.Factory.StartNew(new Func<object, int>(FFF), 10);
Console.WriteLine(s.Result);
运行结果:
10
0