2017-06-20 35 views
1

我有一個異步任務,我想執行任務,並且每當請求任務時,它應該使所有以前的任務過時。這意味着我只想一次只運行一個這樣的任務,並在新的啓動時取消前一個任務。一次執行一個調度任務,並在新開始時取消當前執行

實施例:

用戶按下按鈕以某種計算。控制器在用戶更改輸入數據並再次按下按鈕時計算。第一次計算應該取消,新的計算應該從新的輸入開始。

此模式是否合理?實現這一點的常見模式是什麼?有沒有一個簡單的映射到DispatchQueue/OperationQueue

回答

1

看看NSOperationNSOperationQueue(特別是its cancelAllOperations method)。我認爲,從我收集的用例中,可以將任務封裝在NSOperation(具體子類)中,並使用NSOperationQueue來管理它,包括取消它。

+0

謝謝,我會檢查出來的!現實世界中的人們通常如何處理這樣的用例?當我閱讀教程和博客帖子時,他們執行網絡/本地後臺任務時,他們似乎從未使任務在上下文更改時無效。也許我誤解異步,但不會連續開始兩個請求不保證他們的響應在主線程上的順序?這意味着第一個過時的請求可能晚於第二個,UI將顯示錯誤的數據?我是否有權取消在這裏是正確的方法? – tombardey

+1

@tombardey如果你正在做一些資源密集且耗時的事情,那麼在再次開始新輸入之前取消它是個好主意,假設舊輸出對於新輸入完全是無意義的(並且沒有輸出比錯誤的輸出要好)。您說的沒錯,異步請求沒有任何保證,但用例各不相同,而且經常需要很少的資源才能執行後臺任務,以免人們擔心。 – Aehmlo

相關問題