1
我有一個異步任務,我想執行任務,並且每當請求任務時,它應該使所有以前的任務過時。這意味着我只想一次只運行一個這樣的任務,並在新的啓動時取消前一個任務。一次執行一個調度任務,並在新開始時取消當前執行
實施例:
用戶按下按鈕以某種計算。控制器在用戶更改輸入數據並再次按下按鈕時計算。第一次計算應該取消,新的計算應該從新的輸入開始。
此模式是否合理?實現這一點的常見模式是什麼?有沒有一個簡單的映射到DispatchQueue
/OperationQueue
?
謝謝,我會檢查出來的!現實世界中的人們通常如何處理這樣的用例?當我閱讀教程和博客帖子時,他們執行網絡/本地後臺任務時,他們似乎從未使任務在上下文更改時無效。也許我誤解異步,但不會連續開始兩個請求不保證他們的響應在主線程上的順序?這意味着第一個過時的請求可能晚於第二個,UI將顯示錯誤的數據?我是否有權取消在這裏是正確的方法? – tombardey
@tombardey如果你正在做一些資源密集且耗時的事情,那麼在再次開始新輸入之前取消它是個好主意,假設舊輸出對於新輸入完全是無意義的(並且沒有輸出比錯誤的輸出要好)。您說的沒錯,異步請求沒有任何保證,但用例各不相同,而且經常需要很少的資源才能執行後臺任務,以免人們擔心。 – Aehmlo