在一个有返回值的方法中,我们启用三个事务分别处理数据,每个事务假设耗时为两秒,代码如下:
private List<string> Test()
{
//事务列表
List<Task<List<string>>> tasks = new List<Task<List<string>>>();
//开始时间
DateTime dtF = DateTime.Now;
//事务1
var task = Task<List<string>>.Factory.StartNew(() =>
{
var list = new List<string>();
Thread.Sleep(2000);
list.Add(Guid.NewGuid().ToString());
return list;
});
tasks.Add(task);
//事务2
var task1 = Task<List<string>>.Factory.StartNew(() =>
{
var list = new List<string>();
Thread.Sleep(2000);
list.Add(Guid.NewGuid().ToString());
return list;
});
tasks.Add(task1);
//事务3
var task2 = Task<List<string>>.Factory.StartNew(() =>
{
var list = new List<string>();
Thread.Sleep(2000);
list.Add(Guid.NewGuid().ToString());
return list;
});
tasks.Add(task2);
//获取三个事务的返回值
List<string> res = new List<string>();
foreach (var item in tasks)
{
res.AddRange(item.Result);
}
//结束时间
DateTime dtT = DateTime.Now;
//计算总用时
var dtSp = dtT - dtF;
MessageBox.Show($"结果:{string.Join(",", res)} 共计用时:{dtSp.TotalSeconds}秒");
return res;
}
执行结果如下:
原本需要耗时6秒的程序仅用2秒便执行完毕,并且正确获取到了三个值。
需要注意的是,如果在每个事务之后立即就去获取它的返回值而不是存在一个列表里集中获取的话,在每个事务执行的时候都会等待返回结果,这样耗时就不是2秒而是6秒了