ASP.NET 调用在异步等待时挂起
ASP.NET call hangs on async await
我在 IIS Express 中从 API 控制器对 Google API 的调用在使用异步等待顺序调用时无限期挂起。
var id = CreateDocument("My Title").Result;
async Task<string> CreateDocument(string title)
{
var file = new GData.File { Title = title };
// Stepping over this line in the debugger never returns in IIS Express.
file = await Service.Files.Insert(file).ExecuteAsync();
return file.Id;
}
它不会挂起从测试控制台应用程序调用相同的方法。
当使用相应的同步方法调用时,相同的逻辑也不会挂起 IIS Express。
var id = CreateDocument("My Title");
string CreateDocument(string title)
{
var file = new GData.File { Title = title };
// This has no problem
file = Service.Files.Insert(file).Execute();
return file.Id;
}
我应该在哪里寻找缺陷?
缺陷在这里:
var id = CreateDocument("My Title").Result;
正如我在我的博客上所解释的那样,you should not block on async code。
代替Result
,使用await
:
var id = await CreateDocument("My Title");
我在 IIS Express 中从 API 控制器对 Google API 的调用在使用异步等待顺序调用时无限期挂起。
var id = CreateDocument("My Title").Result;
async Task<string> CreateDocument(string title)
{
var file = new GData.File { Title = title };
// Stepping over this line in the debugger never returns in IIS Express.
file = await Service.Files.Insert(file).ExecuteAsync();
return file.Id;
}
它不会挂起从测试控制台应用程序调用相同的方法。
当使用相应的同步方法调用时,相同的逻辑也不会挂起 IIS Express。
var id = CreateDocument("My Title");
string CreateDocument(string title)
{
var file = new GData.File { Title = title };
// This has no problem
file = Service.Files.Insert(file).Execute();
return file.Id;
}
我应该在哪里寻找缺陷?
缺陷在这里:
var id = CreateDocument("My Title").Result;
正如我在我的博客上所解释的那样,you should not block on async code。
代替Result
,使用await
:
var id = await CreateDocument("My Title");