C# Task总结(Task,Action,Func,委托之间的联系)

(个人学习贴,如有问题请大神指出)

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();
        }
    }

在这ad里插入图片描述
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

猜你喜欢

转载自blog.csdn.net/qq_38094489/article/details/84026464