У меня есть асинхронный метод, который использует действие веб-API. Кажется, он застрял в петле. Мое рассуждение для этого состоит в том, что, если я поставлю точку останова в строке 1 блока catch и перейду на нее, она никогда не попадет во вторую строку.C# асинхронный метод - нужна помощь
Первоначально я возвращал набор данных со 100 000+ (~ 30 МБ) строк и думал, что он может быть просто медленным из-за размера запроса, но после изменения моего действия веб-API для возврата только 1 строки проблема все еще сохранялось. Данные, безусловно, возвращаются, когда я просматриваю URI решения Web API, которое я получаю JSON в моем браузере.
public async Task<IEnumerable<Document>> GetAll()
{
try
{
var response = await _client.GetAsync(
string.Format("{0}/api/document", _baseURI));
// never hits line below
return await response.Content.ReadAsAsync<Document>()
as IEnumerable<Document>;
}
catch (Exception ex)
{
// handle exception
}
}
Я не уверен, что здесь что-то отсутствует? Некоторая помощь будет оценена по достоинству.
EDIT 1
В ответ на некоторые вопросы, у меня есть API проекта Web, который ссылается проект MVC. Мне пришлось внести некоторые изменения из оригинального вопроса для десериализации JSON.
Repository:
public async Task<IEnumerable<Document>> GetAll()
{
try
{
string json;
var response = await _client.GetAsync(string.Format(
"{0}/api/document", _baseURI)).ConfigureAwait(false);
var resource = await response.Content.ReadAsAsync<Document>();
using(var reader = new StreamReader(resource.ToString()))
{
json = reader.ReadToEndAsync().ToString();
}
return JsonConvert.DeserializeObjectAsync<Document>(json)
as IEnumerable<Document>;
}
catch (Exception)
{
throw;
}
}
Контроллер:
public async Task<ActionResult> GetAll()
{
return PartialView("_GetAllDocumentsPartial", await _docRepo.GetAll());
}
С изменениями, описанными в ответах ниже, та же самая проблема все еще происходит при отладке, как указано выше. Однако я получаю «Задача была отменена». исключение в catch в методе в репозитории.
** Никогда ** не пишите 'throw ex'. http://stackoverflow.com/a/2999314/34397 – SLaks
Вы уверены, что он никогда не попадает во вторую строчку? есть проблемы с асинхронизацией и отладкой ... вы можете попробовать поставить точку останова на второй строке, а также просто убедиться. – Tim
Да, только что поставил точку останова, и он не ударил его. Chrome просто продолжает загружаться/страница пуста. – MattSull