let queue = DispatchQueue(label: "com.example.imagetransform")

queue.async {
	let smallImage = image.resize(to:rect)

	DispatchQueue.main.async {
		imageView.image = smallImage
	}
}

var count: Int {
	queue.sync { self.connections.count }
}

dispatchPreconditon(.onQueue(expectedQueue)))
dispatchPrecondition(.notOnQueue(unexpectedQueue)))
protocol SubsystemObserving {
	func systemStarted(...)
	func systemDone(...)
}

class BusyController: SubsystemObserving {
	var invalidated = true

	init(...) { ... }

	func activate() {
		Datatransform.sharedInstance.register(observer: self, queue: DispatchQueue.main)
	}

	func invalidate() {
		dispatchPrecondition(.onQueue(DispatchQueue.main))
		invalidated = true
		DataTransform.sharedInstance.unregister(observer: self)		
	}

	deinit {
		precondition(invalidated)
	}
}

let q = DispatchQueue(label: "com.example.queue", attributes: [.autoreleaseWorkItem])

let source = DispatchSource.read(fileDescriptor: fd. queue: q)

source.setEventHandler { // 이벤트 처리로직 }
source.setCancelHandler { close(fd) }