Загрузка файла отменяется при открытии камеры

Я пытаюсь загрузить файл на сервер. Как только пользователь сделает фотографию с помощью приложения и примет ее, фотография будет загружена. Но если пользователь решит сделать еще одну фотографию, пока предыдущая фотография все еще загружается, процесс загрузки отменяется и выдает AggregateException. Мне нужно загрузить более одного, чтобы избежать такого сценария.

Вот код, который я использую для загрузки файла:

  private async Task<T> ExecuteHttpPost<T>(string url, HttpContent content) where T : BaseServerResponseModel
        {


            try
            {
                using (HttpClient client = new HttpClient())
                {
                    HttpStatusCode statusCode = HttpStatusCode.OK;

                    if (BeforeRequestPerformListener != null)
                    {
                        if (!BeforeRequestPerformListener(this, new BeforeRequestEventArgs(url, null)))
                        {
                            return null;
                        }
                    }

                    var response = await client.PostAsync(url, content);

                    if (ResponseRecivedListener != null)
                    {
                        ResponseRecivedListener(this, response);
                    }

                    statusCode = response.StatusCode;
                    response.EnsureSuccessStatusCode();

                    var entityResponse = await response.GetJsonResponse<T>();

                    entityResponse.ThrowIfNoSuccess();

                    return entityResponse;
                }
            }
            catch (Exception e)
            {

                throw;
            }

            return null;
        }

Я также попытался обернуть весь код в Task.Run, но все равно выдал то же исключение.

Что-нибудь, что мне не хватает?

Примечание: фотография действительно загружается на сервер, если я жду ее завершения. Только когда я открываю камеру во время загрузки, возникает исключение


person Misters    schedule 23.06.2015    source источник
comment
Да, именно в await client.PostAsync(url, content)   -  person Misters    schedule 23.06.2015


Ответы (1)


Существует несколько сценариев, в которых такие загрузки файлов могут быть отменены. На самом деле сделать еще один снимок — это всего лишь один. Вы также должны учитывать события жизненного цикла, такие как самопроизвольная приостановка и завершение работы вашего приложения.

Чтобы создать более надежную среду для этих конфиденциальных соединений с сервером, вам следует рассмотреть возможность делегирования загрузки файлов фоновой задаче. Фоновая задача продолжит работу, даже если ваше приложение будет закрыто (*) или, как в вашем случае, пользователь решит сделать что-то другое.

Самым простым подходом будет использование фоновой передачи.

Обзор: https://msdn.microsoft.com/en-us/library/windows/apps/xaml/Hh452975(v=win.10).aspx Загрузите пример кода: https://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj152727.aspx

Это должно помочь вам. Однако, если вам нужно более сложное решение, вы можете написать себе фоновую задачу, которая обрабатывает вашу очередь загрузки и уведомляет приложение переднего плана об обновлениях статуса, таких как ход выполнения и завершение.

Быстрый старт: https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977055.aspx Как отслеживать ход выполнения и завершение: https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977054.aspx

(*) Существуют ограничения производительности и для фоновых задач.

person Fred    schedule 25.06.2015