             consolePrint("… get progress result of subject: \(subject.name)")
             NetworkSpinner.off()
             do {
-                self.progress = try result.resolve()
-                self.tableView?.reloadData()
+                let progress = try result.resolve()
+                
+                // Prevent tableView scrolling lag issue
+                DispatchQueue.main.async { [weak self] in
+                    self?.progress = progress
+                    self?.tableView?.reloadData()
+                }
+                
             } catch {
                 consolePrint(error)
             }

                self.subject = subject
                self.tableView?.reloadData()
                
                delay(0.3) { [weak self] in
                    self?.fetchProgress(of: subject)
                }
            } catch {
                consolePrint("Refetch subject occurred error: \(error)")
            }

        guard subject.responseGroup != .large else {
            consolePrint("Subject-large is already exists")
            
            self.fetchProgress(of: subject)
            
            return
        }
