异步委托的使用小结
异步委托的使用小结
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
getInfo();
Console.WriteLine("End!!!");
Console.Read();
}
//不带返回参数的委托
public static void getInfo()
{
Action<string> act = doSmoething;
act.Invoke("111111");
//回掉方法方式1
// AsyncCallback callback = doSmoething2;
//回掉方法方式2 T为委托执行后返回到回掉方法的参数
AsyncCallback callback = T =>
{
Console.WriteLine("3333333" + T);
};
//开始执行异步委托
IAsyncResult isr = act.BeginInvoke("222222", callback, null);
//异步委托的等待如果未执行完那么会一直等待
isr.AsyncWaitHandle.WaitOne();
//只等待两秒钟,如果未执行完那么也不继续等待
isr.AsyncWaitHandle.WaitOne(2000);
Action ac = doSmoething3;
//不带参数委托的声明方式
Action a = () =>
{
Console.Write("我是空参数的委托");
};
}
public static void doSmoething(string thing)
{
for (int i = 0; i < 100; i++)
{
Console.WriteLine($"{thing}");
}
}
public static void doSmoething3( )
{
for (int i = 0; i < 100; i++)
{
Console.WriteLine($"");
}
}
public static void doSmoething2(IAsyncResult thing)
{
for (int i = 0; i < 100; i++)
{
Console.WriteLine($"我是异步的学习 ,状态为 {thing.AsyncState}");
}
}
//带返回值的委托
public static void doFunc() {
//不带参数的委托,只有返回值
Func<string> f4 = () =>
{
return "";
};
//带参数与返回值的委托
Func<string, int> func = b =>
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"1111111+++++++1111111+++++{b}");
}
return DateTime.Now.Year;
};
//声明回掉方法,t为执行完后的返回值
AsyncCallback asyncCallback = t =>
{
Console.WriteLine("2222222222");
//当进入到此方法以后说明委托方法已经执行完,已经开始返回,这时调用委托的EndInvoke传入执行完的
结果获取该委托方法的返回值
int result = func.EndInvoke(t);
Console.WriteLine(result);
};
//调用方式1
//func.BeginInvoke("1", asyncCallback, "");
//调用方式2
IAsyncResult isy = func.BeginInvoke("555", t =>
{
int end = func.EndInvoke(t);
Console.WriteLine(end);
},
"");
//单独执行获取返回值时,进程会卡在这里等待委托执行完成。如果不会等待回掉全部执行完就会执行到该方
法
int result = func.EndInvoke(isy);
//等待
isy.AsyncWaitHandle.WaitOne();
}
}
}