Как исправить «Задача была отменена» при загрузке файла

#c# #asp.net-web-api2

#c# #asp.net-web-api2

Вопрос:

Я пытаюсь загрузить файл журнала из клиента настольного приложения на сервер sql db с помощью webapi2, и я получаю сообщение об ошибке «Задача была отменена», эта ошибка не появляется, когда я размещаю проект webapi на локальном компьютере!

 public static bool UploadLogData(string exceptionLog)
{
        bool result = true;


        string dataFilePath = AppDomain.CurrentDomain.BaseDirectory   "ExceptionLog.zip";

        CommonParamModel responseModel = new CommonParamModel();

        try
        {
            HttpClient httpClient = new HttpClient() { BaseAddress = new Uri("http://mywebsite.com") };
            var pairs = new List<KeyValuePair<string, string>>
                    {
                        new KeyValuePair<string, string>( "P1",  ComputerInfoHelper.GetCustomMachineKey())
                        , new KeyValuePair<string, string>( "P2", exceptionLog)
                    };

            var content = new MultipartFormDataContent();

            FileStream filestream = new FileStream(dataFilePath, FileMode.Open);
            string fileName = System.IO.Path.GetFileName(dataFilePath);

            content.Add(new StreamContent(filestream), "file", fileName);
            content.Add(new FormUrlEncodedContent(pairs));

            httpClient.Timeout = TimeSpan.FromMinutes(30);

            var response = httpClient.PostAsync("api/Users/AddExceptionDataLog/", content).Resu<
            if (response.IsSuccessStatusCode)
            {
                string strResult = response.Content.ReadAsStringAsync().Resu<
                JObject json = JObject.Parse(strResult);
                responseModel = json.ToObject(typeof(FreeUserApp)) as CommonParamModel;
            }
            else
            {
                result = false;
            }

        }
        catch (Exception ex)
        {
            Utilities.Error.LogException(Utilities.Error.ErrorSources.Exception, ex.Message, Utilities.Debugger.GetCurrentMethod(), ex);
            result = false;
        }

        return true;
    }
 

Комментарии:

1. Примечание: вы смешиваете async и синхронный код, не делайте этого

2. Кроме того, не забудьте дождаться этих асинхронных вызовов. Это может быть вашей проблемой.

3. хм, но я вызываю результат после асинхронности, так что в основном это вызов синхронизации… я прав?

4. Вызов Result фактически блокирует поток до завершения вызова. Использование await вместо этого освободит поток.

Ответ №1:

Благодаря Майклу Рэндаллу и DBro Это действительно сработало, проблема была решена после использования await на клиенте и в методе api…