【问题标题】:How to execute async/await command that can show result如何执行可以显示结果的 async/await 命令
【发布时间】:2020-06-22 13:26:50
【问题描述】:

我尝试了以下代码在 Task.Run 中执行命令。

SshClient ssh;
    public Form1()
    {
    InitializeComponent();

//BackGround Login is needed.
ConnectionInfo info = new ConnectionInfo(hostNameOrIpAddr, portNo, userName,
    new AuthenticationMethod[] {
    new PasswordAuthenticationMethod(userName, passWord)
ssh = new SshClient(info);
ssh.Connect();
cmd = ssh.CreateCommand(commandString);
    }

private void button1_Click(object sender, EventArgs e)
{
Task.Run(()=>{
SshCommand cmd = ssh.CreateCommand(commandString);
cmd.Execute();
Console.WriteLine(cmd.Result.ToString());
;});
}

但是效果不好。 原因可能是在启动任务后立即 Dispose 流。

【问题讨论】:

  • 嘿@yur,欢迎来到 StackOverflow。请格式化您的代码以提高可读性,这反过来会提高有人回答您的问题的机会:) 另外请更具体地说明“......它不能很好地工作”。您期望发生什么以及正在发生什么?
  • 您想要异步接收来捕获数据。请参阅以下内容:stackoverflow.com/questions/48808074/…
  • 您的代码无法编译
  • 我敢打赌,您的服务器可能需要某种关于按键或其他东西的验证码,并且它会阻止自动连接正常完成。因此,您可能必须首先以 shell 流的形式与其交互,然后发送您的命令。

标签: c# multithreading ssh task


【解决方案1】:

使用 async/await 的方法之一如下:

注意:async 关键字将方法转换为异步方法,这允许您在其主体中使用 await 关键字。

private async void button1_Click(object sender, EventArgs e) {
    var result = await Task.Run(() => RunSshCmd());
    Console.WriteLine(result);
}

假设运行 ssh 命令需要 5 秒才能完成,仅举个例子。

private string RunSshCmd() {       
    Thread.Sleep(5000);
    return "Done.";
}

注意:await 只能在异步方法中使用。

【讨论】:

  • 有了你的回答,我想做的事情就实现了!
  • 很高兴听到这个消息:)
猜你喜欢
  • 2012-05-19
  • 1970-01-01
  • 2015-01-13
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
相关资源
最近更新 更多