25/01/2010

Sử dụng task trong c#

 Đôi khi cần load 1 loạt xử lý tương tự nhau, ví dụ map 1 danh sách object A thành danh sách B

thay vì vòng lặp tuần tự, ta có thể dùng multi task để giảm thời gian hoàn thành tiến trình như sau:

//using System.Threading.Tasks;

List<objectDTO> objectDTOs = new List<objectDTO>();

try

{

//Lấy danh sách objects từ cơ sở dữ liệu

List<object> objects = await unitOfWork.objects.Getobjects(20);

//Danh sách không có item nào, hoàn thành tiến trình

if (objects == null || !objects.Any())

{

return objectDTOs;

}

//khởi tạo danh sách task bằng với danh sách objects

Task<objectDTO>[] taskArray = new Task<objectDTO>[objects.Count];

for (int i = 0; i < objects.Count; i++)

{

object item = objects[i];

//sử dụng hàm MapObjectToDTO(item) để thực hiện tiến trình map base object to DTO object

taskArray[i] = Task.Factory.StartNew(() => MapObjectToDTO(item));

}

//chờ toàn bộ task chạy xong

Task.WaitAll();


//đưa kết quả vào danh sách trả về

for (int x = 0; x < taskArray.Length; x++)

{

if (taskArray[x].Result != null)

{

objectDTOs.Add(taskArray[x].Result);

}

}

}

catch(Exception ex)

{

//xử lý exception

}

return objectDTOs;

Không có nhận xét nào:

Đăng nhận xét