[英]The implications of not using Async/Await in MVC 4
我正在使用MVC 5构建Web应用程序,并且无法在PartialViewResults中使用Async / Await模式,因为它将导致运行时错误。 因此,我不等待某些任务。
例如,我有此标头UI,它是PartialViewResult,可在我的APP的大多数页面上使用:
/// <summary>
/// Get UI header for trainee's main details, name, aim, score etc
/// </summary>
/// <param name="personId"></param>
/// <param name="aim"></param>
/// <param name="showScore"></param>
/// <returns></returns>
public PartialViewResult _TraineeHeaderDetails(int personId, string aim, bool showScore, bool showEvidenceLink)
{
var result = _httpService
.Get(_urlConfigurations.GetTraineeDetails + personId + "/" + aim);
if (result.StatusCode != HttpStatusCode.OK)
//TODO: NG - add proper mvc error page redirect
throw new Exception("ID not found");
//RedirectToAction("")
// use GetAwaiter to get around async/await limitation in MVC 5
var model = _jsonDeserializer.GetModelAsync<TraineeHeaderViewModel>(result).GetAwaiter().GetResult();
if (model == null) return PartialView(new TraineeHeaderViewModel());
//For link to trainee summary
model.PersonId = personId;
model.AimCode = aim;
// flag to show/hide graph
model.ShowScore = showScore;
// flag to show/hide evidence link
model.ShowEvidenceLink = showEvidenceLink;
return PartialView(model);
}
如您所见,我的http服务调用是获取我通常使用GetAsync的MVC操作中的位置,并且在反序列化JSON结果时,也使用.GetAwaiter()。GetResult();
我的问题是,这会影响应用程序性能吗? 因为它是MVC,并且没有正在使用的UI线程(使用Razor渲染值),所以我认为我正在做的事情还可以,但是我很想知道其他人对此的看法。
缺口
如您所见,我的http服务调用是获取我通常使用GetAsync的MVC操作中的位置,并且在反序列化JSON结果时,也使用.GetAwaiter()。GetResult();
就个人而言,我更喜欢在需要同步调用它们时使用同步API,而不是使用阻塞( GetAwaiter().GetResult()
)。 阻塞方法假定您正在调用的异步方法对每个await
使用ConfigureAwait(false)
。 如果他们忘记了一个,那么您就有潜在的僵局。
我的问题是,这会影响应用程序性能吗?
从到达第一个字节的时间来看,它可能不会影响性能。 肯定会影响您的可扩展性; 如果您的Web服务器遭受重创或突然涌入请求,它将无法像使用纯async
解决方案那样很好地扩展。
但是您对此无能为力。 这是ASP.NET classic(在ASP.NET Core中已修复)的局限性。 那就是生活。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.