Как я могу понять, почему Task.Isfaults - это правда? - PullRequest
0 голосов
/ 30 января 2019

Я слежу за этим блогом.Я хочу создать метод записи, который будет принимать файл.

[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.IsFaults имеет значение true, и не удается загрузить.Как я могу понять, почему он не работает, и как я могу это исправить?

1 Ответ

0 голосов
/ 30 января 2019

Если Task неисправен, theTask.Exception покажет вам именно то, что произошло, но, честно говоря, было бы лотом проще просто await theTask и использовать обычную обработку исключений.ContinueWith - это устаревшая функция (см. Отказ от ответственности 4.0, на которую указал Филдер), и ее редко следует использовать в новом коде.Весь этот метод может быть async очень легко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...