我正在使用NMSSH来连接服务器,然后从该服务器获取数据。但是,连接到服务器,执行命令和检索数据都需要时间才能完成。之前,我使用sleep()
命令来允许程序暂停并让这些命令完成运行,但如果我没有指定确切的睡眠时间,数据可能无法完全完成下载(因为数据大小不同很难确定正确的睡眠量)。因此,在做了一些研究之后,调度组和异步操作似乎是正确的方法。我实现了这些如下:等待任务完成后再继续下一个任务
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'调用包装在一个异步模块中,它们将相互依次执行 – NitroNbg
因为每次调用都需要一定的时间单独运行,所以如果我一个接一个地调用它们,第一个调用将不会完成它试图执行命令之前的连接,导致错误。 – SpartanEngr1297