Cod*_*gry 9 .net c# async-await dotnet-httpclient
我用SendAsync它HttpCompletionOption.ResponseHeadersRead来获取头文件.接下来我检查Content-Type并Content-Length确保响应是标记并且大小合适.如果超过某个时间跨度,我使用a CancellationTokenSource来取消SendAsync它.
但是,如果类型和大小正确,我继续实际获取标记字符串ReadAsStringAsync.我可以为此通话添加取消令牌吗?因此,如果实际下载时间太长,我可以中止它.或者这可以通过其他方式完成吗?
我不想使用,GetStringAsync因为我使用自定义HttpRequestMessage.
PS:我对C#很新,2周.有些东西可能会让我不知所措.
不,你不能.有没有过载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)