2015-01-16 4 views
1

Как я могу написать ниже строки кода в .NET 4.0:Как ниже линии могут быть заменены в .net4.0

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

Благодарности

+2

Возможно установить .NET 4.5? – leppie

+0

Если это единственная строка кода, которая вызывает у вас проблемы, возможно, вам стоит рассмотреть возможность захвата реализации из [Reference Source] (http://referencesource.microsoft.ком/# System.Web/EventHandlerTaskAsyncHelper.cs, 0009fd6522687b6c). Тем не менее, я бы заподозрил, что на самом деле это всего лишь верхушка айсберга, пытающегося вернуть обратно код .NET 4.5 в 4.0. –

+0

Спасибо за ответ. Я создаю приложение в .net 4.0, которое было использовано в .net 4.5 .. @leppie – user3318540

ответ

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

+0

Три вопроса с этим ответом. Задачи были введены в .NET 4.0 и статьи о том, как конвертировать стиль APM в/из Задачи был опубликован с самого начала. Библиотека параллельных расширений содержит расширения и помощники для многих общих классов, таких как Smtp, WebRequest и т. Д. И, вероятно, является источником EventHandlerTaskAsyncHelper. Во-вторых, ASP.NET никогда не упоминался. В-третьих, ссылка показывает только пример использования EventHandlerTaskAsyncHelper –

+0

@PanagiotisKanavos 1. EventHandlerTaskAsyncHelper используется в ASP.NET 4.5, его пространство имен является System.Web, поскольку я связан, и он не является частью параллельных расширений , 2. Я не понимаю, почему вы говорите о Задачах, поскольку они вообще не упоминаются. 3. Ссылка о внедрении «IHTTPModule», который может представлять интерес для OP, поскольку я не знаю, что именно он хочет сделать. – VMAtm

+1

К сожалению, не проверялось пространство имен, но функциональность не специфична для ASP.NET. Это универсальная реализация вызова методов Begin/End из Tasks, аналогичная [образцам MSDN для .NET 4.0] (http://msdn.microsoft.com/en-us/library/dd997423%28v=vs.110%29 .aspx # sectionToggle7). Если бы я был OP, я был бы больше обеспокоен отсутствием 4,5 веб-функций, а не вспомогательной реализацией –

1

EventHandlerTaskAsyncHelper просто помощник, который обеспечивает APM-стиль (BeginOperation/EndOperation) интерфейса через Task. Задача делает реализует 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. В то время как вы можете получить некоторые из функций 4.5 с пакетом Microsoft.Bcl.Async, значительных частей будет отсутствовать. Новые библиотеки, такие как TPL Dataflow, Immutable Collections и т. Д., Просто требуют использования .NET 4.5.

Если вы не нацелились на Windows XP, нет смысла оставаться в .NET 4.0, особенно когда приложение уже написано в 4.5.