.net 4.0 如何在.net4.0中替换下一行

.net 4.0 如何在.net4.0中替换下一行,.net-4.0,.net-4.5,asp.net-4.0,asp.net-4.5,.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 谢谢这种迁移的主要问题是,您试图适应仅在.NET 4.5中提供的体系结构解决方案。根据MSDN,唯一的目的是: 将返回任务的异步方法转换为使用ASP.NET早期版本中使用的异步编程模型并基于开始和结束事件的方法 及备注

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

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

谢谢

这种迁移的主要问题是,您试图适应仅在.NET 4.5中提供的体系结构解决方案。根据MSDN,唯一的目的是:

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

及备注部分:

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

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

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


EventHandlerTaskAsyncHelper只是一个在任务上提供APM风格(BeginOperation/EndOperation)接口的助手。任务确实实现了IAsyncResult,因此您可以直接从
BeginOperation
方法返回它。
intoperation
方法只需将其
IAsyncResult
参数转换回任务并等待它。这在MSDN文章中有介绍 :

public IAsyncResult BeginCalculate(整数小数位数、异步回调、对象状态)
{
Task f=Task.Factory.StartNew(=>Compute(decimalPlaces),state);
如果(ac!=null)f.ContinueWith((res)=>ac(f));
返回f;
}
公共字符串计算(int numPlaces)
{
...
}
公共字符串EndCalculate(IAsyncResult ar)
{
返回((任务)应收)。结果;
}
EventHandlerTaskAsyncHelper类只是使编写此类代码变得更容易,并对已完成的任务等进行了一些检查。这个概念不是.NET 4.5所特有的

也就是说,最好的解决方案是将其余代码升级到.NET4.5,而不是尝试将应用程序后端口到.NET4.0。虽然您可以通过该软件包获得一些4.5功能,但重要的部分将丢失。较新的库(如TPL数据流、不可变集合等)只需要.NET4.5即可工作


除非你针对WindowsXP,否则没有理由继续.NET 4,特别是当应用程序已经在4.5中编写时。

安装.NET 4.5。如果这是导致问题的唯一一行代码,你可能想从中抓取实现。然而,我怀疑这实际上只是尝试将某些.NET4.5代码反向转换为4.0的冰山一角。谢谢您的回复。我正在.NET4.0中构建.NET4.5中使用的应用程序@找不到leppietype或命名空间任务eventhandler。。我得到了这个错误。我怎样才能解决这个问题@Damien_不信的人你想做什么?您不能只接受使用.NET4.5中的功能的代码,而期望它在4.0中运行。您可能可以绕过使用Microsoft.Bcl.Async包,但真正的解决方案是将代码升级到4.5e。有了这个答案,任务就在.NET 4.0中介绍了,并且从一开始就发布了关于如何将APM样式转换为任务或从任务转换为任务的文章。并行扩展库包含许多常见类(如Smtp、WebRequest等)的扩展和帮助程序,可能是EventHandlerTaskAsyncHelper的起源。第二,ASP.NET从未被提及。第三,链接仅显示了如何使用的示例EventHandlerTaskAsyncHelper@PanagiotisKanavos1.EventHandlerTaskAsyncHelper正在ASP.NET 4.5中使用,正如我所链接的,它的命名空间是System.Web,并且它不是并行扩展的一部分。2.我不明白你为什么要谈论任务,因为根本没有提到它们。3.链接是关于实现
IHTTPModule
,这可能是OP的兴趣点,因为我不知道他到底想做什么。哎呀,没有检查名称空间,但功能不是特定于ASP.NET的。它是从任务调用Begin/End方法的通用实现,类似于。如果我是OP,我会更关心缺少的4.5Web功能,而不是助手实现
 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;
}