停止任意函数执行

时间:2018-12-31 14:25:21

标签: ios swift multithreading swift4 grand-central-dispatch

出于这个问题的目的,假设我需要在某个对象上运行某个函数,并且该函数将花费很长时间(几分钟)执行。还要假设我对此功能(*)没有控制权。 我现在如何取消该功能的执行?

我想在后台线程中运行它以保持主线程空闲,我可以使用GCD,NSOperationNSThread来做到这一点。但是,据我所知,这些支持都没有被迫停止。它们都可以取消,但是必须在函数本身中实现此取消-但是我无权访问该函数,所以我不能这样做。我最近得到的是使用NSThreadexit(),但不幸的是,它不能应用于实例变量(请参见代码示例)。我当前的计划是尝试发送一个通知,并观察该对象/函数内的内容,并使用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

(*)在这种情况下,我确实可以控制该函数并且可以实现实际的取消,但是由于我使用的库,这将需要大量重构。

0 个答案:

没有答案