【发布时间】:2017-09-14 02:08:46
【问题描述】:
我正在尝试通过 API 调用从数据库中下载 PDF。 所有 PDF 都被下载,但只有一行我得到任务被取消异常
public async System.Threading.Tasks.Task<ActionResult> Record(string empNo)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/pdf"));
var response = client.GetAsync("URL?empNo=" + empNo).Result;
if (response.IsSuccessStatusCode)
{
var files = Directory.GetFiles(Server.MapPath(@"~/EmpPDF/"));
foreach (var file in files)
{
try
{
System.IO.File.Delete(file);
}
catch
{ }
}
var bytes = await response.Content.ReadAsByteArrayAsync();
using (Stream writer = System.IO.File.Create(System.Web.HttpContext.Current.Server.MapPath(@"~EmpPDF/" + empNo + ".pdf")))
{
writer.Write(bytes, 0, bytes.Length);
writer.Flush();
responsePDFPath = @"/EmpPDF/" + empNo + ".pdf"; //+ response.Content.Headers.ContentDisposition.FileName;
}
ViewBag.PathToPdf = responsePDFPath;
return View();
}
}
}
我收到此代码的任务被取消异常。
【问题讨论】:
-
由于混合了阻塞调用 (
.Result) 和异步代码而导致死锁。 -
您确实需要格式化您的代码,显然缺少
}。 -
你可以跳过这些东西。无论如何我得到了完美的输出。只有一条记录我得到了一个例外
-
您下载的文件有多大?您的 HttpClient 超时设置为多长时间?如果要下载的文件比您设置的超时时间长,则会导致 TaskCancelledException
标签: c# json asp.net-web-api model-view-controller controller