相关疑难解决方法(0)

GetResponseAsync不接受cancellationToken

似乎GetResponseAsync在Async/Await中不接受cancellationToken.所以问题是我如何取消以下程序,只要我需要从响应中收集Cookie:

 using (HttpWebResponse response = (HttpWebResponse) await request.GetResponseAsync())
 {
    cookies.Add(response.Cookies);
 }
Run Code Online (Sandbox Code Playgroud)

实现上述目标的替代代码也是受欢迎的.

c# httpwebrequest httpwebresponse async-await cancellation-token

14
推荐指数
2
解决办法
8339
查看次数

在请求取消之前永远不会结束的任务

我需要一个永远不会结束的任务,直到请求取消.目前最简单的方法是:

var cancellation = new CancellationTokenSource();

var task = Task.Factory.StartNew(async () =>
{
    while (true)
    {
        await Task.Delay(10000, cancellation.Token);
    }
}, cancellation.Token).Unwrap();
Run Code Online (Sandbox Code Playgroud)

我不喜欢的是对Task.Delay方法的调用,因为它需要有限的等待时间间隔.

有更优雅的解决方案吗?

.net asynchronous task-parallel-library

8
推荐指数
2
解决办法
1105
查看次数

SSH.NET实时命令输出监控

script.sh远程Linux机器上有一个运行时间很长的脚本.我需要启动它并实时监控它的活动.它活动期间的脚本可以输出到stdoutstderr.我正在寻找一种捕获两种流的方法.

我使用Renci SSH.NET上传script.sh并启动它,所以很高兴看到这个库有一个解决方案.在我看来,完美的解决方案是新方法:

var realTimeScreen= ...;

var commandExecutionStatus = sshClient.RunCommandAsync(
    command: './script.sh',
    stdoutEventHandler: stdoutString => realTimeScreen.UpdateStdout(stdString)
    stderrEventHandler: stderrString => realTimeScreen.UpdateStderr(stderrString));
...
commandExecutionStatus.ContinueWith(monitoringTask =>
{
    if (monitoringTask.Completed)
    {
        realTimeScreen.Finish();
    }
});
Run Code Online (Sandbox Code Playgroud)

wpf ssh monitoring async-await ssh.net

3
推荐指数
2
解决办法
2万
查看次数