C#Net.HttpClient取消ReadAsStringAsync?

Cod*_*gry 9 .net c# async-await dotnet-httpclient

我用SendAsyncHttpCompletionOption.ResponseHeadersRead来获取头文件.接下来我检查Content-TypeContent-Length确保响应是标记并且大小合适.如果超过某个时间跨度,我使用a CancellationTokenSource来取消SendAsync它.

但是,如果类型和大小正确,我继续实际获取标记字符串ReadAsStringAsync.我可以为此通话添加取消令牌吗?因此,如果实际下载时间太长,我可以中止它.或者这可以通过其他方式完成吗?

我不想使用,GetStringAsync因为我使用自定义HttpRequestMessage.

PS:我对C#很新,2周.有些东西可能会让我不知所措.

i3a*_*non 5

不,你不能.有没有过载ReadAsStringAsync,它接受一个取消标记,你可以不取消不可取消,异步操作.

然而,您可以放弃该操作并继续使用WithCancellation扩展方法,该方法实际上不会取消操作,但会让代码像以下一样流动:

static Task<T> WithCancellation<T>(this Task<T> task, CancellationToken cancellationToken)
{
    return task.IsCompleted
        ? task
        : task.ContinueWith(
            completedTask => completedTask.GetAwaiter().GetResult(),
            cancellationToken,
            TaskContinuationOptions.ExecuteSynchronously,
            TaskScheduler.Default);
}
Run Code Online (Sandbox Code Playgroud)


Bas*_*sie 5

现在在 .NET 5 中可用:

ReadAsStringAsync(CancellationToken) 
Run Code Online (Sandbox Code Playgroud)

参考