在一個有返回值的方法中,我們啓用三個事務分別處理數據,每個事務假設耗時爲兩秒,代碼如下:
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秒了