应用场景:如果两个函数执行没有先后关系,以及不存在彼此依赖,那么可以在后台开启线程任务让他们同步执行,这样可以节省不少时间。
请看下面例子:
[TestMethod()]
public void test()
{
var d = DateTime.Now;
var msg = "同步运行...";
run1();
msg += "\nrun1:" + (DateTime.Now - d).TotalMilliseconds + "ms";
run2();
msg += "\nrun2:" + (DateTime.Now - d).TotalMilliseconds + "ms";
msg += "\n总时间:" + (DateTime.Now - d).TotalMilliseconds + "ms";
msg += "\n开启Task后...";
d = DateTime.Now;
Task<bool> checkHotelTask = Task.Factory.StartNew<bool>(() => run1());
Task<bool> checkFlightTask = Task.Factory.StartNew<bool>(() => run2());
if (checkHotelTask != null)
{
checkHotelTask.Wait();
}
if (checkFlightTask != null)
{
checkFlightTask.Wait();
}
if (checkHotelTask != null)
{
bool v1 = checkHotelTask.Result;
}
if (checkFlightTask != null)
{
bool v2 = checkFlightTask.Result;
}
msg += "\n总时间:" + (DateTime.Now - d).TotalMilliseconds + "ms";
}
private bool run1()
{
for (int i = 0; i < 10000; i++)
{
for (int j = 0; j < 10000; j++)
{
}
}
return true;
}
private bool run2()
{
for (int i = 0; i < 10000; i++)
{
for (int j = 0; j < 10000; j++)
{
}
}
return true;
}
执行后效果如下:
msg:
同步运行...
run1:265ms
run2:528ms
总时间:528ms
开启Task后...
总时间:327ms
不过如果内部函数抛出异常的话,task是不太能捕获到异常信息的,需要手工处理。