await/async メソッドを使用してローカル ファイルの内容を読み取ろうとする非常に単純なコントローラーがあります。XUnit またはコンソール アプリからテストするのは魅力的です。ただし、次のコントローラーから使用すると、アプリケーションは await reader.ReadToEndAsync() でスタックし、二度と戻ってきません。
何が間違っている可能性がありますか?(同期コンテキストに関連している可能性がありますか?)
コントローラー:
public ActionResult Index()
{
profiles.Add(_local.GetProfileAsync(id).Result);
return View(profiles);
}
メソッド GetProfileAsync は次のようになります。
public override async Task<Profile> GetProfileAsync(long id)
{
// Read profile
var filepath = Path.Combine(_directory, id.ToString() , "profile.html");
if (!File.Exists(filepath))
throw new FileNotFoundException(string.Format("File not found: {0}", filepath));
string content;
using (var fs = new FileStream(filepath, FileMode.Open, FileAccess.Read))
{
using (var reader = new StreamReader(fs))
{
content = await reader.ReadToEndAsync();
}
}
...
return profile;
}