1. 程式人生 > >C# Task總結(Task,Action,Func,委託之間的聯絡)

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