===========================投票案例:
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