我有一个非常简单的控制器,它尝试使用 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;
}