Недоразумение с задачей, асинхронным ожиданием, примером с SendRequestAsync

1

Если я назову этот метод (1.), ничего не происходит, и я не знаю почему. Если я просто позвоню model.TestConnection(null); без результата Я ударил Breakpoint 1, но потом я не жду результата.

Итак, почему я не ударил любую точку останова, когда вызываю модель. TestConnection (null).Result? И почему я ударяю их, когда я просто вызываю model.TestConnection(null) ;?

Метод GetUrl вызывает SendRequestAsync и ожидает его результата, а затем возвращает его содержимое. Все это происходит как задача, поэтому вы можете ожидать GetUrl для получения контента. Но, похоже, на моей стороне было большое недоразумение относительно параллельной библиотеки задач (TPL).

  1. var result = model.TestConnection(null).Result;
    
  2. public class CcuMockModel : CcuModelBase, ICcuModel
    {
        public Task<CheckLoginResult> TestConnection(string url)
        {
           return GetUrl(@"http://localhost:8080/api/getObjects");
        }
    }
    
  3. public class CcuModelBase
    {
        public async Task<CheckLoginResult> GetUrl(string url)
        {
            var aHBPF = new HttpBaseProtocolFilter();
            aHBPF.IgnorableServerCertificateErrors.Add(ChainValidationResult.Expired);
            aHBPF.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted);
    
            var client = new HttpClient(aHBPF);
    
            var request = new HttpRequestMessage(HttpMethod.Get, new Uri(url));
    
            HttpResponseMessage response;
            try
            {
                response = await client.SendRequestAsync(request);
                // Breakpoint 1
                return new CheckLoginResult()
                {
                    Content = response.Content.ToString(),
                    Status = CheckLoginResult.ErrorCode.Ok
                };
            }
            catch (Exception ex)
            {
            }
            // Breakpoint 2
            return new CheckLoginResult() {Status = CheckLoginResult.ErrorCode.Failed};
        }
    }
    
Теги:
async-await
asynchronous
task
task-parallel-library

1 ответ

1
Лучший ответ

спасибо Lee для Link http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html Это очень много, и я помог мне с пониманием задачи, асинк и жду.

Я заблокировал свою задачу

var result = model.TestConnection(null).Result;

Теперь я жду, и все работает правильно.

private async static void Testing()
{
    var result = await model.TestConnection(null);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню