Giải thích DispatchGroup là gì?

{{FormatNumbertoThousand(model.total_like)}} lượt thích
92 lượt xem
Swift master

DispatchGroup cho phép đồng bộ hóa công việc. Bạn có thể sử dụng chúng để gửi nhiều hạng mục công việc khác nhau và theo dõi khi chúng hoàn thành, mặc dù chúng có thể chạy trên các hàng đợi khác nhau. Hành vi này có thể hữu ích trong trường hợp progress chỉ được hoàn thành khi tất cả các nhiệm vụ được chỉ định hoàn thành.

Tình huống ví dụ là nếu bạn có nhiều cuộc gọi webservice mà tất cả đều cần phải hoàn tất trước khi tiếp tục. Ví dụ: bạn cần tải xuống nhiều bộ dữ liệu cần được xử lý bởi một số chức năng. Bạn phải đợi tất cả các webservice hoàn tất trước khi gọi hàm để xử lý tất cả dữ liệu nhận được.

func doLongTasksAndWait () {
   print("starting long running tasks")
   let group = DispatchGroup() //create a group for a bunch of tasks we are about to do
   for i in 0...3 { //launch a bunch of tasks (eg a bunch of webservice calls that all need to be finished before proceeding to the next ViewController)
      group.enter() //let the group know that something is being added
      DispatchQueue.global().async { //run tasks on a background thread
         sleep(arc4random() % 4) //do some long task eg webservice or database lookup (here we are just sleeping for a random amount of time for demonstration purposes)
         print("long task \(i) done!")
         group.leave() //let group know that the task is finished
      }
   }
   group.wait() //will block whatever thread we are on here until all the above tasks have finished (so maybe dont use this function on your main thread)
   print("all tasks done!")
}

Ngoài ra, nếu bạn không muốn đợi các nhóm hoàn thành mà thay vào đó muốn chạy một hàm khi tất cả các tác vụ đã hoàn thành, hãy sử dụng hàm notify thay cho group.wait()

{{login.error}}