我正在尝试记录对API的请求和响应。我目前正在使用一个可以捕获httpwebresponses和httpwebrequests的delegatingHandler。ContinueWith方法不等待,直到异步任务完成
处理程序:
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
LogRequest(request);
return base.SendAsync(request, cancellationToken).ContinueWith((task) =>
{
HttpResponseMessage response = task.Result;
LogResponse(response);
return response;
});
}
LogResponse:
private void LogResponse(HttpResponseMessage response)
{
ApiResponse info = new ApiResponse();
//Populate response obj
if (response.Content != null)
{
response.Content.ReadAsStringAsync().ContinueWith((task) =>
{
info.Content = task.Result;
}
);
}
_repository.LogResponse(info);
}
我得到一个空例外,当我尝试插入内容到数据库在我的仓库。但是,当我逐步浏览内容对象时,它填充了响应。我想我试图在请求完成之前将数据插入到数据库中。
我不想等待它,因为这会破坏使用异步请求的目的,如何在请求完成时将它挂起来运行logresponse方法?我认为continueWith负责照顾并在任务完成时运行该操作(这是否意味着请求的下载不一定完成?)。
任何想法?
尝试调试打印出的码流。 – SimpleVar