gpt4 book ai didi

c# - 我怎么知道为什么 Task.Isfaulted 是真的?

转载 作者:行者123 更新时间:2023-11-30 20:15:28 30 4
gpt4 key购买 nike

我正在关注 this博客。我想创建将接受文件的 post 方法。

[HttpPost]
public Task<IEnumerable<FileDescDto>> Post()
{
var folderName = "Uploads";
var PATH = HttpContext.Current.Server.MapPath("~/" + folderName);
var rootUrl = Request.RequestUri.AbsoluteUri.Replace(Request.RequestUri.AbsolutePath, String.Empty);
if (Request.Content.IsMimeMultipartContent())
{
var streamProvider = new CustomMultipartFormDataStreamProvider(PATH);
var task = Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith<IEnumerable<FileDescDto>>(t =>
{

if (t.IsFaulted || t.IsCanceled)
{
throw new HttpResponseException(HttpStatusCode.InternalServerError);
}

var fileInfo = streamProvider.FileData.Select(i => {
var info = new FileInfo(i.LocalFileName);
return new FileDescDto(info.Name, rootUrl + "/" + folderName + "/" + info.Name, info.Length / 1024);
});
return fileInfo;
});

return task;
}

throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted"));
}
}

当我调试时,我发现 t.IsFaulted 为真,但上传失败。我如何才能看到它失败的原因以及如何修复它?

最佳答案

如果 Task 出现故障,theTask.Exception 将准确显示发生的情况,但坦率地说,它会更容易很多简单地 await theTask 并使用常规的异常处理。 ContinueWith 是一项遗留功能(请参阅 Filder 指出的 4.0 免责声明),应该很少在新代码中使用。整个方法可以很容易地async

关于c# - 我怎么知道为什么 Task.Isfaulted 是真的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54437374/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com