我正在使用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