C# Task總結(Task,Action,Func,委託之間的聯絡)
阿新 • • 發佈:2018-11-21
(個人學習貼,如有問題請大神指出)
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