using System;
using System.Threading;
namespace 启动线程方法1
{
class Program
{
static string func01(int a, string b)
{
Console.WriteLine("func1线程" + a + b);
//Thread.Sleep(100); //一般耗时长的操作,才会开启一个异步线程去单独执行任务。
//string timeBegin = DateTime.Now.TimeOfDay.ToString(); // 20:33:50.7187500
TimeSpan timeBegin = DateTime.Now.TimeOfDay;
int i = 0;
while (i < a)
{
i++;
}
//string timeEnd = DateTime.Now.TimeOfDay.ToString(); // 20:33:50.7187500
TimeSpan timeEnd = DateTime.Now.TimeOfDay;
return (timeEnd - timeBegin).ToString(); //我的机器T460-i5-6300-2.40GHz的4核,需要耗时:00:00:04.3600549 ,这个程序只会用到1个核,每秒大概累加0.5G,判断再占用0.5G*3就对了。
}
//停止1秒
static void func02()
{
Thread.Sleep(1000);
}
static void Main(string[] args)
{
//func01线程调用func01
Func wt = func01;
IAsyncResult jj = wt.BeginInvoke(2048000000, "累加耗时测试:", null, null);
//main线程会和func01线程一起异步执行
Console.WriteLine("main线程异步执行的输出");
//判断func01线程是否执行完成并退出
while (jj.IsCompleted == false)
{
Console.Write(".");
Thread.Sleep(1000);
}
//如果func01线程已经退出,那么可以可以去取得该线程的返回值了
string jjI = wt.EndInvoke(jj);
Console.WriteLine(jjI);
//检测10秒时间内,我能累加到多少:
Int64 i = 0;
Action wt2 = func02;
IAsyncResult jj2 = wt2.BeginInvoke(null,null);
while (jj2.IsCompleted == false)
{
i++;
}
Console.WriteLine("1秒内我累加到了:"+i);
Console.ReadKey();
}
}
}
//运行结果:
//我的机器T460-i5-6300-2.40GHz的4核,需要耗时:00:00:04.3600549 ,这个程序只会用到1个核,每秒大概累加0.5G,判断再占用0.5G*3就对了。
//func1线程2048000000累加耗时测试:
//main线程异步执行的输出.....00:00:04.3595124 (2048000000/4.3595124=469777308 即为1秒460M)
//1秒内我累加到了:380137061 (1秒380M)