我是新手,并且在任何主要的线程工作中都没有过多的经验,所以我试着提高我的技能,希望得到一点帮助或指导。这是我似乎无法弄清楚的一个概念。
我有一个通过输入和输出流进行通信的类,应用程序通过输出流发送,并从输入流中读取结果。现在我已经创建了通过回调发送异步的方法,但我希望能够同步发送,并在更高级别处理线程。 目前我的沟通方法看起来像这样:
.each
是否有一种通用方法来包装异步所有如上所述? 如果我认为这完全错了,在某些情况下我喜欢简单地能够打电话
typealias CommunicationCallback = ((CommunicationResult) -> Void)
func sendAsync(send message: String, closure: @escaping CommunicationCallback) {
DispatchQueue.global().async { [weak self] in
guard let strongSelf = self else {
return
}
let messagePair = MessagePair(SendReceiveResult(sent: message, received: nil),
closure)
strongSelf.writeQueue.enqueue(messagePair)
strongSelf.writeFromQueue() //Calls the CommunicationCallback closure after it has read result
}
}
func sendSyncronized(send message: String) -> CommunicationResult {
???
}
而不是
let result = sendSyncronized("foo")
每次,因为在某些情况下我需要在等待前一个结果时执行许多顺序写入。 欢迎任何帮助!
答案 0 :(得分:-1)
也许您可以使用可选的返回类型。
typealias CommunicationCallback = ((CommunicationResult) -> Type?)
在异步方法中返回nil,在同步方法中返回值。使用如果让检查可选绑定是否成功。如果没有,你需要从闭包中获取值。