2017-03-16 20 views
0

我正在從SFTP下載文件的工具,一次2。我正在使用Tamir.Sharpssh連接到SFTP,我認爲這可以通過使用異步和等待來實現。當我運行程序時,它完成了沒有錯誤,但我沒有看到任何文件下載。SFTP使用Tamir.Sharpssh的多個異步下載

以下是我的代碼,謝謝!

private async static void SFTPFileGetHelper() 
{ 
    try 
    { 
     Task<String> task1 = GetFileAsync(sftpFile1, localFile1); 
     Task<String> task2 = GetFileAsync(sftpFile2, localFile2); 
     await Task.WhenAll(task1, task2); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 

public static Task<String> GetFileAsync(string remoteFilePath, string localFilePath) 
{ 
    return (Task.Run(() => 
    { 
     try 
     { 
      Sftp conn = new Sftp(Host, Username, Password); 
      conn.Connect(); 
      conn.Get(remoteFilePath, localFilePath); 
      conn.Close(); 
      return remoteFilePath; 
     } 
     catch(Exception ex) 
     { 
      return ex.Message; 
     } 
    })); 
} 
+0

不要使用SharpSsh,它是一個死的項目! –

+0

您發佈的代碼有什麼問題? – svick

+0

這是否意味着它不能與SharpSsh兼容? – OHHO

回答

0

我找到了答案。 我不得不將SFTPFileGetHelper()從void更改爲Task。 當主函數調用SFTPFileGetHelper()時,它需要從中獲取結果,在這種情況下,如果SFTP下載成功,它將返回true。

private async static Task<bool> SFTPFileGetHelper() 
{ 
    try 
    { 
     Task<String> task1 = GetFileAsync(sftpFile1, localFile1); 
     Task<String> task2 = GetFileAsync(sftpFile2, localFile2); 
     await Task.WhenAll(task1, task2); 
     return true; 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
     return false; 
    } 
} 
0

您可以使用事件處理檢查目前的進展,並開始和上載的結束:

Sftp.OnTransferStart += new FileTransferEvent(sshCp_OnTransferStart); 
Sftp.OnTransferProgress += new FileTransferEvent(sshCp_OnTransferProgress); 
Sftp.OnTransferEnd += new FileTransferEvent(sshCp_OnTransferEnd); 


private void sshCp_OnTransferStart(string src, string dst, int transferredBytes, int totalBytes, string message) 
{ 
    Console.WriteLine("sshCp_OnTransferStart: " + transferredBytes + "Bytes"); 
} 

private void sshCp_OnTransferProgress(string src, string dst, int transferredBytes, int totalBytes, string message) 
{ 
    Console.WriteLine("sshCp_OnTransferProgress: " + transferredBytes + "Bytes"); 
} 

private void sshCp_OnTransferEnd(string src, string dst, int transferredBytes, int totalBytes, string message) 
{ 
    Console.WriteLine("sshCp_OnTransferEnd: " + transferredBytes + "Bytes"); 
}