如何在.net4.0中替换以下行

时间:2015-01-16 07:50:53

标签: .net-4.0 .net-4.5 asp.net-4.0 asp.net-4.5

如何在.net 4.0中编写以下代码行:

EventHandlerTaskAsyncHelper asyncHelper = new EventHandlerTaskAsyncHelper(WriteLogMessages);--> this is in .net 4.5

由于

2 个答案:

答案 0 :(得分:1)

EventHandlerTaskAsyncHelper只是一个帮助程序,它通过Task提供APM样式(BeginOperation / EndOperation)接口。任务 实现IAsyncResult,因此您可以直接从BeginOperation方法返回它。 EndOperation方法只需将其IAsyncResult参数强制转换回任务并等待它。这在MSDN文章中显示 TPL and Traditional .NET Framework Asynchronous Programming

 public IAsyncResult BeginCalculate(int decimalPlaces, AsyncCallback ac, object state)
{
    Task<string> f = Task<string>.Factory.StartNew(_ => Compute(decimalPlaces), state);
    if (ac != null) f.ContinueWith((res) => ac(f));
    return f;
}

public string Compute(int numPlaces)
{
    ...
}

public string EndCalculate(IAsyncResult ar)
{
    return ((Task<string>)ar).Result;
}

EventHandlerTaskAsyncHelper类只是可以更容易地编写这样的代码,对已经完成的任务进行一些检查等。这个概念不是.NET 4.5特有的。

也就是说,最好的解决方案是将其余代码升级到.NET 4.5,而不是尝试将应用程序反向移植到.NET 4.0。虽然可以使用Microsoft.Bcl.Async包获得4.5版功能,但重要部分将会丢失。较新的库如TPL Dataflow,Immutable Collections等只需要.NET 4.5即可运行。

除非您定位Windows XP,否则没有理由保留在.NET 4.0中,尤其是当应用程序已经用4.5编写时。

答案 1 :(得分:0)

此类迁移的主要问题是您正在尝试适应仅在.NET 4.5中可用的体系结构解决方案。根据MSDN,EventHandlerTaskAsyncHelper唯一的目的是:

  
    

将返回任务的异步方法转换为使用以前版本的ASP.NET中使用的异步编程模型的方法,该方法基于开始和结束事件。

  

备注部分:

  
    

要在ASP.NET 4.5中处理异步任务,可以实现将任务作为TaskEventHandler委托返回的逻辑。 这种基于异步任务的编程模型取代了以前版本的ASP.NET 中使用的模型,该模型基于开始和结束事件的所有事件处理。 ...

  

因此,此类用于包装其他代码以适应新版本的ASSP.NET MVC站点。因此,您必须根据您在项目中使用的MVC版本的规则重新考虑应用程序的整个类图和体系结构。

可能这个线程将是一个良好的开端:

ASP.NET MVC - IHttpModule, Asynchronous Event Handler, EventHandlerTaskAsyncHelper