C# 将业务服务中的同步操作更改为异步操作&;存储库层(ASP.NET MVC 2)

C# 将业务服务中的同步操作更改为异步操作&;存储库层(ASP.NET MVC 2),c#,multithreading,asp.net-mvc-2,asynchronous,C#,Multithreading,Asp.net Mvc 2,Asynchronous,我正在开发一个与旅游相关的网站,以下是我的高级架构: ASP.NET MVC 2 (Presentation Layer) Services Layer Repository Layer communicating with external J2EE Services 目前,我的所有层仅支持以下同步通信: //Pricing Controller... public ActionResult GetRates() { //Contruct Pricing Request

我正在开发一个与旅游相关的网站,以下是我的高级架构:

ASP.NET MVC 2 (Presentation Layer)  
Services Layer  
Repository Layer communicating with external J2EE Services
目前,我的所有层仅支持以下同步通信:

//Pricing Controller...
public ActionResult GetRates()
{
    //Contruct Pricing Request            
    //PricingRequest request = Contruct Pricing Request...; 
    PricingResponse response = _pricingService.GetComponentPricing(request);
    //....
    //...
    return View(response);
}

//Pricing Service...
public PricingResponse GetComponentPricing(PricingRequest pricingRequest)
{
    //Do Something...
    PricingResponseDomainObject responseDomainObject = _pricingRepository.GetComponentPricing(pricingRequest.ConvertToPricingRequestDomainObject());
    //Apply Business Rules and perform some action on response
    //Convert DomainObjectResponse into ServiceObjectResponse...
    return response(PricingResponse);
}

//Pricing Repository...
public PricingResponseDomainObject GetComponentPricing(PricingRequestDomainObject pricingRequest)
{
    //Do Something...
    //Call J2EE Service and Get Response
    //Return Response
    return response(PricingResponseDomainObject);
}
现在我需要将定价控制器更改为AsyncController,并将
public ActionResult GetRates()
转换为异步操作

为了支持异步操作,我需要在服务和存储库层中做哪些更改?我必须完全重写它们吗

编辑:需要将控制器更改为异步


对于特定的搜索场景,我需要调用J2EE服务1到5次(独立操作),将所有响应合并为一个响应,并将其交给控制器,以便能够将其呈现给用户。

不,您可能不需要做任何事情。事实上,将它们转换为异步本身会使代码更加复杂。异步控制器背后的思想是,控制器操作在完成处理后返回,并且由于这些方法仍然是同步的,因此效果很好。你做你的工作,完成后再回来

如果他的应用程序使用线程局部变量呢?我相信盲目地切换到异步控制器操作会有问题。@qes-我想说的是,在web应用程序中使用线程局部变量在很多方面都会带来麻烦。请记住,请求是由线程池服务的,这意味着线程在每个请求之后都不会被破坏。我已经看到了ORM使用它们的大量单位工作实现。@ QES——如果是这样的话,那么我会考虑那些ORM被破坏,特别是如果他们没有在这个文档的警告中放置大闪烁的霓虹灯标志。TLS假设有很多种方法可以让你一败涂地,任何框架利用它们而不通知用户这一事实都是不负责任的。。特别是在当今这个多核处理器的时代,关注并行和异步编程方法。Mystere Man,我在线阅读的大多数文档都说,公开方法的服务需要实现基于事件的异步模式。请。请参阅以下链接:您试图实现什么目标?你想解决什么问题?更改为异步控制器可能不是一个合适的解决方案。@qes-更有可能的是,他的一些服务调用需要很长时间才能完成。这就是异步控制器的用途。我要求避免做出这样的假设。qes&Mystere Man,我已经更新了将我的控制器转换为异步控制器的需要,我希望这是正确的方法。请。如果你们不这么想,我建议你们。