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 ac = Test;//不带返回值
Func 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 a = iar.AsyncState as Func;//会把返回结果
Console.WriteLine("线程已经结束!值="+a.EndInvoke(iar));//回调方法的运行结果
}
}
}