Как я могу написать ниже строку кода в .net 4.0:
EventHandlerTaskAsyncHelper asyncHelper = new EventHandlerTaskAsyncHelper(WriteLogMessages);--> this is in .net 4.5
Спасибо
Как я могу написать ниже строку кода в .net 4.0:
EventHandlerTaskAsyncHelper asyncHelper = new EventHandlerTaskAsyncHelper(WriteLogMessages);--> this is in .net 4.5
Спасибо
EventHandlerTaskAsyncHelper — это просто помощник, который предоставляет интерфейс в стиле APM (BeginOperation/EndOperation) над задачей. Задача реализует IAsyncResult, поэтому вы можете вернуть его непосредственно из метода BeginOperation
. Метод EndOperation
должен только привести свой аргумент IAsyncResult
обратно к задаче и ожидать ее. Это показано в статье MSDN TPL и Традиционное асинхронное программирование .NET Framework:
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 just упрощает написание такого кода с некоторыми проверками уже выполненных задач и т. д. Эта концепция не является чем-то специфичным для .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.
Основная проблема такой миграции заключается в том, что вы пытаетесь вписаться в архитектурное решение, доступное только в .NET 4.5. Согласно MSDN, EventHandlerTaskAsyncHelper
единственная цель:
Преобразует асинхронные методы, возвращающие задачу, в методы, использующие модель асинхронного программирования, используемую в предыдущих версиях ASP.NET и основанную на начальных и конечных событиях.
И раздел примечаний:
Для обработки асинхронных задач в ASP.NET 4.5 вы реализуете логику для возврата задачи в виде делегата TaskEventHandler. Эта модель асинхронного программирования на основе задач заменяет модель, использовавшуюся в предыдущих версиях ASP.NET, которая основывает всю обработку событий на начальных и конечных событиях. ...
Таким образом, этот класс используется для упаковки другого кода, чтобы соответствовать новой версии сайта ASSP.NET MVC. Таким образом, вам придется пересмотреть всю диаграмму классов и архитектуру вашего приложения в соответствии с правилами версии MVC, которую вы будете использовать в своем проекте.
Может быть, эта тема будет хорошим началом:
ASP.NET MVC — IHttpModule, Обработчик асинхронных событий, EventHandlerTaskAsyncHelper
IHTTPModule
, которая может представлять интерес для ОП, так как я не знаю, что именно он хочет сделать.
- person VMAtm; 16.01.2015
Microsoft.Bcl.Async
, но реальное решение — обновить код до версии 4.5. - person Panagiotis Kanavos   schedule 16.01.2015