2017-06-20 58 views
1

我有一个异步任务,我想执行任务,并且每当请求任务时,它应该使所有以前的任务过时。这意味着我只想一次只运行一个这样的任务,并在新的启动时取消前一个任务。一次执行一个调度任务,并在新开始时取消当前执行

实施例:

用户按下按钮以某种计算。控制器在用户更改输入数据并再次按下按钮时计算。第一次计算应该取消,新的计算应该从新的输入开始。

此模式是否合理?实现这一点的常见模式是什么?有没有一个简单的映射到DispatchQueue/OperationQueue

回答

1

看看NSOperationNSOperationQueue(特别是its cancelAllOperations method)。我认为,从我收集的用例中,可以将任务封装在NSOperation(具体子类)中,并使用NSOperationQueue来管理它,包括取消它。

+0

谢谢,我会检查出来的!现实世界中的人们通常如何处理这样的用例?当我阅读教程和博客帖子时,他们执行网络/本地后台任务时,他们似乎从未使任务在上下文更改时无效。也许我误解异步,但不会连续开始两个请求不保证他们的响应在主线程上的顺序?这意味着第一个过时的请求可能晚于第二个,UI将显示错误的数据?我是否有权取消在这里是正确的方法? – tombardey

+1

@tombardey如果你正在做一些资源密集且耗时的事情,那么在再次开始新输入之前取消它是个好主意,假设旧输出对于新输入完全是无意义的(并且没有输出比错误的输出要好)。您说的没错,异步请求没有任何保证,但用例各不相同,而且经常需要很少的资源才能执行后台任务,以免人们担心。 – Aehmlo

相关问题