私は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()
しかし、すべてのコマンドが同時に実行されるため、これは正しく動作していないようです。基本的には、上記の各ブロックを実行する必要があり、次に完了するまで待ってから次のブロックに移動します。
4つの非同期リクエストを送信する必要があるのはなぜですか?これらの4つの 'myfirstconnection'呼び出しを1つの非同期ブロックにラップすると、それらは互いに順番に実行されます – NitroNbg
私は各呼び出しを個別に実行するのに時間がかかりますので、私はそれらを1つずつ呼び出すと完了しませんコマンドが実行される前に接続がエラーを起こします。 – SpartanEngr1297