1.c#的異步實作,之前代碼編寫大都開幾個線程。
現可以使用“async+await”方式實作異步(具體不詳細介紹,暫且止在會用,僅僅是c#更新史上一個工具):
static void Main(string[] args)
{
method1();
method2();//不會等待method1執行結束,再執行method2
Console.ReadKey();
}//結果輸出是"method 1"和"method 2"字元串交替出現,但不會嚴格按照1:1交替出現
private static async Task method1()//必須使用task或task<T>做傳回
{
await Task.Run(() =>
{
for (int i = 0; i < 100; i++)
{
Console.WriteLine("method 1");
}
});
}
private static void method2()
{
for (int i = 0; i < 25; i++)
{
Console.WriteLine("method 2");
}
}
2.委托函數
舊的使用方法:需要先定義委托類型,然後定義一個符合委托類型簽名的函數,
在調用前,需聲明并建立委托對象,将指定函數與委托進行關聯。
public delegate int Math(int param1,int param2);定義委托類型
Public int Add(int param1,int param2)//定義同簽名函數
{
Return param1+param2;
}
Math math;//聲明委托
math=new Math(Add);建立委托對象,與指定進行關聯
math(3,4);//調用委托函數
現在可以使用内置委托類型:
Func<int,int,int> math=Add;//指定委托對象并關聯函數
math(3,4);//調用委托函數
Action委托具有Action<T>、Action<T1,T2>、Action<T1,T2,T3>……Action<T1,……T16>多達16個的重載,其中傳入參數均采用泛型中的類型參數T,涵蓋了幾乎所有可能存在的無傳回值的委托類型。Func則具有Func<TResult>、Func<T,Tresult>、Func<T1,T2,T3……,Tresult>17種類型重載,T1……T16為出入參數,Tresult為傳回類型。
既然是委托類型,也同樣可以與匿名函數、或者采用Lambda表達式結合使用:
匿名函數:
Func<int,int,int> math=delegate(int param1,int param2)
{
Return param1+param2;
}
Lambda:
Func<int,int,int> math=(param1,param2)=>
{
Return param1+param2;
}
Action的使用如同上面Func的使用一樣,隻是缺少了傳回類型,直接調用委托函數。
Public void Add(int param1,int param2)
{
MessageBox.show((param1+param2).ToString());
}
//遇到此類的委托函數調用,那我們就可以直接用Action了:
Action<int,int> math=Add;
math(3,4);