出于这个问题的目的,假设我需要在某个对象上运行某个函数,并且该函数将花费很长时间(几分钟)执行。还要假设我对此功能(*)没有控制权。 我现在如何取消该功能的执行?
我想在后台线程中运行它以保持主线程空闲,我可以使用GCD,NSOperation
或NSThread
来做到这一点。但是,据我所知,这些支持都没有被迫停止。它们都可以取消,但是必须在函数本身中实现此取消-但是我无权访问该函数,所以我不能这样做。我最近得到的是使用NSThread
和exit()
,但不幸的是,它不能应用于实例变量(请参见代码示例)。我当前的计划是尝试发送一个通知,并观察该对象/函数内的内容,并使用Thread.exit()
杀死该线程。我只是想知道是否有内置或第三方的“更清洁”或更简单的方法。
let someObject = Object()
// Using GCD
dispatchQueue.async { someObject.expensiveFunction() }
// Using NSOperation
operationQueue.addOperation { someObject.expensiveFunction() }
// Using NSThread
let thread = Thread { someObject.expensiveFunction() }
thread.exit() // exit is not available on an instance
(*)在这种情况下,我确实可以控制该函数并且可以实现实际的取消,但是由于我使用的库,这将需要大量重构。