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

I.p*_*ern 2 c# api asp.net-mvc post

我正在关注这个博客.我想创建接受文件的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"));
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我调试时,我得到了t.IsFaulted是真的,它无法上传.我怎么知道它失败的原因以及如何解决?

Mar*_*ell 6

如果Task出现故障,theTask.Exception会告诉你到底发生了什么,但坦率地说,这将是一个很大很容易直接await theTask与使用常规的异常处理.ContinueWith是一项遗留功能(请参阅Filder指出的4.0免责声明),并且很少在新代码中使用.这整个方法async非常容易.