似乎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
我需要一个永远不会结束的任务,直到请求取消.目前最简单的方法是:
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方法的调用,因为它需要有限的等待时间间隔.
有更优雅的解决方案吗?
script.sh远程Linux机器上有一个运行时间很长的脚本.我需要启动它并实时监控它的活动.它活动期间的脚本可以输出到stdout和stderr.我正在寻找一种捕获两种流的方法.
我使用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)