Web API アクションを使用する非同期メソッドがあります。ループに陥っているようです。これは、catch ブロックの 1 行目にブレーク ポイントを設定してステップ インすると、実際には 2 行目に到達しないためです。
最初は 100,000 行以上 (~30 mb) のデータセットを返していましたが、リクエストのサイズが原因で遅くなる可能性があると考えていましたが、Web API アクションを変更して 1 行のみを返すように変更した後も、問題は解決しませんでした。Web API ソリューションの URI を参照すると、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
}
}
ここで何か不足しているかどうかわかりませんか?いくつかの助けをいただければ幸いです。
編集1
いくつかの質問に答えて、MVC プロジェクトによって参照される Web API プロジェクトがあります。JSON デシリアライゼーションの元の質問からいくつかの変更を加える必要がありました。
リポジトリ:
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 で例外が発生しました。