【发布时间】:2019-11-27 13:45:32
【问题描述】:
我想知道我的操作是否被取消或正常完成。这是我的代码 sn-p :
class PacketReceiver {
private let m_executer = OperationQueue()
private var m_operation : Operation?
private func operationFinishedHandler()
{
if let op = m_operation {
if op.isCancelled {
print("Operation cancelled")
} else {
print("Operation finished OK \(op.isCancelled)")
}
}
}
func start()
{
let rxPacketOperation = PacketReceiverOperation()
rxPacketOperation.completionBlock = self.operationFinishedHandler
m_operation = rxPacketOperation
m_executer.addOperation(rxPacketOperation)
}
func cancel()
{
if let op = m_operation {
op.cancel()
}
}
func join()
{
if let op = m_operation {
print("is op cancelled = \(op.isCancelled)")
}
m_executer.waitUntilAllOperationsAreFinished()
if let op = m_operation {
print("is op cancelled = \(op.isCancelled)")
}
}
}
后来我有:
let packetReceiver = PacketReceiver()
packetReceiver.start()
packetReceiver.cancel()
packetReceiver.join()
我看到join() 方法内部isCancelled 属性设置为true。但是当我在完成的处理程序中检查它时,它是错误的。我想这是一种预期的行为。但是检查我的操作是否被取消的正确方法是什么?
这是我的操作课:
class PacketReceiverOperation : Operation {
private var m_packetData : String = ""
private let m_simDataProvider = SimDataProvider(okAttemptId : 2)
private let m_currentTimeProvider = CurrentTimeProvider()
private func prepareReceiver() {
m_packetData = ""
print("\(m_currentTimeProvider.getCurrentTimeAsString()) : prepare SIM receiver")
}
override func main() {
if isCancelled {
return
}
prepareReceiver()
if isCancelled {
return
}
var isPacketReceived = false
var isFirstChunkReceived = false
repeat {
if isCancelled {
return
}
if let chunkData = m_simDataProvider.getPacket() {
isFirstChunkReceived = true
m_packetData.append(";" + chunkData)
} else {
if isFirstChunkReceived {
isPacketReceived = true
}
}
} while isPacketReceived == false
}
}
【问题讨论】:
标签: swift nsoperationqueue nsoperation