【发布时间】:2017-03-27 15:43:03
【问题描述】:
我使用NMSSH 连接到服务器,然后从该服务器获取数据。但是,连接到服务器、执行命令和检索数据都需要时间来完成。以前,我使用sleep() 命令来允许程序暂停并让这些命令完成运行,但如果我没有指定确切的睡眠时间,数据可能无法完全完成下载(因为数据在大小很难确定正确的睡眠量)。因此,在做了一些研究之后,Dispatch Groups 和 Async 操作似乎是正确的方法。我按如下方式实现了这些:
let queue = DispatchQueue(label: "myqueue")
let group = DispatchGroup()
let myfirstconnection: SSH = SSH()
myfirstconnection.hostname = "@hostname"
myfirstconnection.username = "user"
myfirstconnection.password = "password"
queue.async(group: group) {
myfirstconnection.connectToServer()
print("1")
}
group.wait()
queue.async(group: group) {
myfirstconnection.performCommand()
print("2")
}
group.wait()
queue.async(group: group) {
myfirstconnection.retrieveData()
print("3")
}
group.wait()
queue.async(group: group) {
myfirstconnection.endSession()
print("4")
}
group.wait()
但是,这似乎无法正常工作,因为所有命令仍同时运行。基本上我需要上面的每个块都运行,然后等到完成后再移动到下一个块。
【问题讨论】:
-
为什么要先发送四个异步请求?如果您将这四个
myfirstconnection调用包装在一个异步块中,它们将相对于彼此按顺序执行 -
因为我进行的每个调用都需要时间单独运行,所以如果我一个接一个地调用它们,第一个在尝试执行命令之前将无法完成连接,从而导致错误。跨度>