Tôi cố gắng để asynchronize mã ban đầu của tôiChạy nhiệm vụ bó async khi một trật tự thực hiện nhất định cần phải được bảo tồn
for(var item in items)
{
dbAccess.Save(item);
}
mà hoạt động tốt:
var tasks = new List<Task>();
for(var item in items)
{
tasks.Add(dbAccess.SaveAsync(item));
}
await Task.WhenAll(tasks);
Tuy nhiên, tôi cần thêm một cuộc gọi dọn sạch bổ sung trước khi tôi lưu và lưu vào DB của tôi:
var tasks = new List<Task>();
for(var item in items)
{
tasks.Add(dbAccess.DeleteAsync(item.id));
tasks.Add(dbAccess.SaveAsync(item));
}
await Task.WhenAll(tasks);
Mã này ở trên không chính xác vì Lưu ync không nên được thực hiện cho đến khi DeleteAsync tương ứng được hoàn tất. Nói cách khác, việc xóa phải luôn đi trước khi lưu cho từng mục nhưng thứ tự cho các mục không quan trọng.
Có cách nào hoàn hảo để thực hiện việc này không?
Làm thế nào về việc phát hành tất cả các xóa trước, chờ chúng, sau đó phát hành tất cả các lưu và sau đó chờ đợi cho những người? Nếu không, bạn nên đóng gói mỗi lần xóa + lưu vào một tác vụ duy nhất. –
Lasse điểm tốt, tôi đơn giản hóa mã của tôi cho mục đích của câu hỏi này. Tôi không thể thực hiện đề xuất của bạn vì có nhiều hơn một chút tôi không hiển thị. Trên thực tế, DeleteAsync trả về một thứ khác cần được chuyển đến SaveAsync. – AstroSharp
Vì vậy? Gói chúng thành một nhiệm vụ mà trước tiên gọi deleteasync, sau đó gọi saveasync sau đó? –