using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace 线程启动 { class Program { static int Test(int t,int b) { Console.WriteLine("test"+ t); Thread.Sleep(1000);//等待1000ms return 5520; } static void Main(string[] args) { // Action<int> ac = Test;//不带返回值 Func<int,int,int> ac = Test; IAsyncResult iar = ac.BeginInvoke(100, null, null);//异步调用 Console.WriteLine("中华人民共和国"); // 判断线程是否结束,循环方法 方法1========================= while (!iar.IsCompleted)//判断线程是否已经有返回值 { Console.WriteLine("线程已经结束,返回值:" + ac.EndInvoke(iar));//输出返回值 } //判断线程是否结束,回调方法 方法2========================== IAsyncResult iar = ac.BeginInvoke(100,OnCallBack, ac);//回调用方法,倒数第二个参数是回调的方法,倒数第一个传递值给回调方法 Console.WriteLine("中华人民共和国"); //判断线程是否结束,延时等待 方法3========================== bool isend = iar.asyncwaithandle.waitone(1000);//延时1000ms检查线程是否结束 if (isend)//如果返回true说明线程已经结束读了返回结果,否则不读 { console.writeline(ac.endinvoke(iar)); } //lambda表达试取返回值======================================= ac.BeginInvoke(100,300,iar=> { int a = ac.EndInvoke(iar); Console.WriteLine(a); },null); Console.ReadKey(); } //以下是回调方法的具体实现: static void OnCallBack(IAsyncResult iar) { Func<int, int, string> a = iar.AsyncState as Func<int,int, string>;//会把返回结果 Console.WriteLine("线程已经结束!值="+a.EndInvoke(iar));//回调方法的运行结果 } } }