2016-09-09 3 views
4

У меня есть приложение .NET Core ASP.NET MVC 6, и я уверен, что это ошибка в Visual Studio. Если я помещаю точку останова после утверждения ожидания, объект не отображается в локалях, и я не могу навести указатель мыши на проверку. Но если я использую переменную, она все равно работает нормально, и она определенно заполнена.переменные async Visual Studio 2015, которые не отображаются в отладчике

Что-то же просто, как это:

public async Task<IActionResult> Index() 
    { 
     var location = await _listingLocationService.GetLocationByAddress("123 Fake Street"); 
     return Content(location.Latitude.ToString() + " " +location.Longitude.ToString()); 
    } 

Если я устанавливаю точку останова на оператора возврата, я не могу проверять местоположение. Он нигде не появляется. Я даже могу удалить ожидание & место. Результат в конце, и до сих пор ничего не отображается. Но когда я продолжаю, в представлении отображаются location.latitude и location.longitude fine. Поэтому я знаю, что он заселен.

Для полноты я также включу функцию GetLocationByAddress, которая делает то же самое, если я положу точку останова в любом месте после ожидания, я не могу проверить переменные (даже десериализованный список!). ,

public async Task<Geolocation> GetLocationByAddress(string address) 
     { 
      using (var client = new HttpClient()) 
      { 
       client.BaseAddress = new Uri("https://maps.googleapis.com/maps/api/geocode/json"); 
       var request = new HttpRequestMessage(HttpMethod.Get, "?address=" + WebUtility.UrlEncode(address) + "&key=..."); 
       var response = await client.SendAsync(request); 
       var contents = await response.Content.ReadAsStringAsync(); 
       var locationResult = JsonConvert.DeserializeObject<GoogleLocationResult>(contents); 
       if (locationResult.status == "OK") 
       { 
        var result = locationResult.results.First().geometry.location; 
        return new Geolocation 
        { 
         Latitude = result.lat, 
         Longitude = result.lng 
        }; 
       } 
       else 
       { 
        return null; 
       } 
      } 
     } 
+0

Здравствуйте, adam3039, вы нашли какое-либо решение? Или, по крайней мере, это причина? – Vi100

ответ

5

Ну, после потери всего дня с этой проблемой я наконец нашел источник проблемы, а также решение ... В моем случае проблема возникла после обновления моего проекта, чтобы использовать .net core 1.1 Preview 1 следующие шаги показано здесь: Link to MSFT .NET Blog

проблема была вызвана этой строки кода в файле project.json:

"buildOptions": { 
    "debugType": "portable", <---- THIS 
    "preserveCompilationContext": true, 
    "emitEntryPoint": true 
} 

после установки «debugType» на «полные», долгожданные переменные стали снова показывается при отладке.

Надеюсь, что это поможет кому-то выйти!

-2

Это не ошибка. Когда отладчик попадает в обратную линию, это связано с тем, что предыдущая строка сразу возвращала объект Task. Ваш метод GetLocation еще не запущен (что имеет смысл, поскольку он создает исходящий HTTP-вызов, который будет занимать больше времени, чем миллисекунды, необходимые для возврата задачи). Когда вы нажмете на обратную линию, ваш отладчик остановился там, но неполная задача означает, что местоположение не будет готово. Лучшее место для размещения точки останова, вероятно, находится в обратной линии вашего метода GetLocation.

И, кстати, вы получите ошибку null ref в вашем методе действий, если вызов, сделанный в Google Maps, не удался.

+0

Я поставил точки останова по всему коду, включая обратную линию метода определения местоположения, переменные недоступны для проверки. Я сделал это миллион раз в MVC 5, поэтому я считаю, что испытываю ошибку. Я понимаю async/wait и почему он не будет оцениваться до тех пор, пока он не будет использован. – adam3039

+1

Jeff, вы ошибаетесь ... предыдущая строка не возвращает объект Task, потому что она «ждет», поэтому вы должны получить результат асинхронного вызова в переменной ... Я испытываю ошибочное поведение в вопросе сейчас, внезапно. Мои асинхронные вызовы относятся к базе данных по значениям EF Core. Кажется, ошибка ... – Vi100

Смежные вопросы