我正在开发一个ASP.NET MVC,它通过WCF服务完全加载其数据。我的模型只是调用WCF服务。然后控制器将模型传递给视图。我在this文章中读到,如果可以,最好先进行异步调用。但是我仍然不确定使用哪个电话。如果构成服务的数据需要一段时间才能加载,会发生什么?是否意味着我的控制器代码将继续运行,如果达到return语句时数据不存在,我的控制器将返回一个空视图,由于视图访问未填充的模型字段,这也可能导致空指针异常?
答案 0 :(得分:1)
如果您的控制器返回任务,那么您将没事。如果您使用的是C#5.0,则可以使用async / await使代码比文章中显示的内容更易于维护。基本上你的代码看起来像这样
public async Task<ActionResult> SomeAction()
{
var someData = await wcfServiceProxy.GetDataAsync() //alternatively an async call to your model service which should also be async
//some work with the data here
return View(someData);
}
或者您可以不关心并使用所有同步调用。使用同步调用的缺点是您的吞吐量会受到影响。您将能够每秒处理200个请求,而不是每秒50K请求(我正在凭空消除这些数字)。当然,在大多数情况下,您根本不关心,因为您的项目每秒不会超过20个请求。