C# 带取消的WriteLineAsync
我将我的方法扩展到了C# 带取消的WriteLineAsync,c#,C#,我将我的方法扩展到了async,但是我希望能够通过用户请求和超时时间来取消,但是WriteLineAsync不支持取消令牌的移交。我尝试了嵌套任务,但不起作用。有人能支持我吗 public async Task tapAsync(int x, int y, int timeouttime) { CancellationTokenSource cts; cts = new CancellationTokenSource(); await Task.Run(async() =
async
,但是我希望能够通过用户请求和超时时间来取消,但是WriteLineAsync
不支持取消令牌的移交。我尝试了嵌套任务,但不起作用。有人能支持我吗
public async Task tapAsync(int x, int y, int timeouttime)
{
CancellationTokenSource cts;
cts = new CancellationTokenSource();
await Task.Run(async() =>
{
try
{
cts.CancelAfter(timeouttime);
await myWriter.WriteLineAsync("input tap " + x.ToString() + " " + y.ToString());
await myWriter.FlushAsync();
await Task.Delay(2000);
}
catch (OperationCanceledException)
{
Console.WriteLine("canceled");
}
}, cts.Token);
cts = null;
}
至少到目前为止,您还不能取消
WriteLineAsync
本身
您最多只能在两次操作之间取消:
public async Task TapAsync(int x, int y, int timeouttime)
{
CancellationTokenSource cts;
cts = new CancellationTokenSource();
cts.CancelAfter(timeouttime);
return TapAsync(x, y, source.Token);
await myWriter.WriteLineAsync("input tap " + x.ToString() + " " + y.ToString());
token.ThrowIfCancellationRequested();
await myWriter.FlushAsync();
token.ThrowIfCancellationRequested();
await Task.Delay(2000, token);
}
为了清晰和灵活,我可能会将其拆分为:
public Task TapAsync(int x, int y, int timeouttime)
{
CancellationTokenSource cts;
cts = new CancellationTokenSource();
cts.CancelAfter(timeouttime);
return TapAsync(x, y, source.Token);
}
public async Task TapAsync(int x, int y, CancellationToken token)
{
token.ThrowIfCancellationRequested();
await myWriter.WriteLineAsync("input tap " + x.ToString() + " " + y.ToString());
token.ThrowIfCancellationRequested();
await myWriter.FlushAsync();
token.ThrowIfCancellationRequested();
await Task.Delay(2000, token);
}
myWriter的类型是什么?您的文本流将是垃圾。因此,我们不妨结束它并关闭()它,这样会猛拉地板垫,导致异步写入失败。