Đô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