У меня есть 2 вида проектов приложений С# WPF:
- на .NET 4.0, который я не могу перенести на .NET 4.5
- на основе .NET 4.0, с которым я могу перейти на .NET 4.5
Все они должны запускать 2-10 длительных (дней) процессов, которые могут быть отменены и повторно запущены пользователями.
Мне интересно следовать лучшим методам проектирования. Прежде всего, теперь мне интересно разоблачить использование BackgroundWorker
, хотя, надеюсь, мой вопрос должен быть справедливым в отношении других асинхронных шаблонов.
Я вижу (противоречащие) параллельные точки зрения о
- Модель асинхронного программирования (APM)
- Асинхронный шаблон на основе событий (EAP)
- BackgroundWorker
асинхронные шаблоны:
-
A).NET 4.5 сделал их устаревшими
- назван как таковой в книге Джозефа Альбахари, Бен Альбахари "С# 5.0 в двух словах: окончательная ссылка" в подглаве " Устаревшие шаблоны", в то время как его предыдущее издание "С# 4.0 в двух словах: окончательная ссылка" не
- Статья MSDN "Асинхронное программирование с помощью Async и Await (С# и Visual Basic)" сообщает:
"Асинхронный подход к асинхронному программированию предпочтительнее существующих подходов практически в каждом случае. В частности, этот подход лучше BackgroundWorker для операций с привязкой к IO, потому что код проще, и вам не нужно защищать от условий гонки. В сочетании с Task.Run асинхронное программирование лучше, чем BackgroundWorker для операций с привязкой к процессору, потому что асинхронное программирование разделяет координационные данные о выполнении вашего кода из работы что Task.Run передается в threadpool "
- B) Они (или, по крайней мере,
BackgroundWorker
) не устарели в .NET 4.5
Я все еще сомневаюсь:
- Являются ли эти шаблоны (в первую очередь, BGW) устаревшими в .NET 4.5?
-
Если они устарели в .NET 4.5, почему они не устарели в .NET 4.0?
2A) Не понимаю ли я неправильно, что новые возможности .NET 4.5 все еще "легки" для реализации/воспроизводимости в .NET 4.0?