===========================投票案例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ConsoleApplication3
{
class Program
{
private delegate int dgTakesAWhile(int date, int ms);
private delegate void aaa();
static void Main(string[] args)
{
dgTakesAWhile dg = TakesAWhile;
//异步执行委托
IAsyncResult sr = dg.BeginInvoke(10, 100, null, null);
//如果该异步委托没有执行完成,则一直执行循环
while (!sr.IsCompleted)
{
Console.Write(".");
}
Console.WriteLine();
//方法执行结束,返回一个值
int result = dg.EndInvoke(sr);
Console.WriteLine(result);
Console.ReadLine();
}
//委托方法
private static int TakesAWhile(int date, int ms)
{
Console.Write("入口");
Thread.Sleep(ms);
Console.Write("出口");
return ++date;
}
}
}
===========================等待句柄:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
private delegate int DGTakesAWhile(int data, int ms);
static void Main(string[] args)
{
DGTakesAWhile dg = TakesAWhile;
//异步执行委托
IAsyncResult sr= dg.BeginInvoke(10, 100, null, null);
while (true)
{
Console.WriteLine(".");
//阻止当前线程(60毫秒),直到异步委托执行完成
if (sr.AsyncWaitHandle.WaitOne(60,false))
{
Console.WriteLine("收到信号");
break;
}
}
//委托结束,返回值
Console.WriteLine(dg.EndInvoke(sr));
Console.ReadLine();
}
//需要委托的方法
private static int TakesAWhile(int data, int ms)
{
Console.WriteLine("开始");
Thread.Sleep(ms);
Console.WriteLine("结束");
return ++data;
}
}
}
===========================异步回调
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ConsoleApplication2
{
class Program
{
private delegate int DGTakesAWhile(int data, int ms);
static void Main(string[] args)
{
DGTakesAWhile dg = TakesAWhile;
//异步执行TakesAWhile委托,并执行完委托之后回调CallbackTakesAWhile函数。
//dg:传递给回调函数的对象
IAsyncResult ar = dg.BeginInvoke(10, 100, CallbackTakesAWhile, dg);
Console.ReadLine();
}
//委托
private static int TakesAWhile(int data, int ms)
{
Console.WriteLine("进口");
Thread.Sleep(ms);
Console.WriteLine("出口");
return ++data;
}
//回调函数
private static void CallbackTakesAWhile(IAsyncResult ar)
{
//获取传递过来的对象
DGTakesAWhile dg = ar.AsyncState as DGTakesAWhile;
//委托执行结束,返回值
Console.WriteLine(dg.EndInvoke(ar));
}
}
}
转载于:https://blog.51cto.com/962410314/1607158