В вашем примере действительно не выполняется асинхронная работа. Похоже, что единственное, что вы хотите сделать, - это разгрузить некоторую синхронную работу в фоновый поток, чтобы поддерживать поток пользовательского интерфейса отзывчивым в течение времени, необходимого для завершения синхронного метода - Thread.Sleep
в этом случае -
Как указано на MSDN ; Начиная с .NET Framework 4, параллельная библиотека задач (TPL) является предпочтительным способом написания многопоточного и параллельного кода. Это то, что делает ваш метод UseTasks()
, то есть он использует Task.Run
для планирования вызова на Thread.Sleep
в потоке пула потоков с помощью планировщика задач TPL по умолчанию.
Шаблон BeginInvoke / EndInvoke известен как Модель асинхронного программирования (APM) . Этот шаблон больше не рекомендуется для новых разработок, как указано здесь .
Поэтому, чтобы ответить на ваши вопросы, вы, как правило, «должны использовать задачи» при разгрузке работы в фоновый поток в приложениях .NET 4+.