Разница между ThreadStart и Action
Кто-нибудь знает разницу между
Dispatcher.BeginInvoke(DispatcherPriority.Background, new ThreadStart(() =>
{
и
Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
{
Ответы
Ответ 1
Не должно быть разницы. ThreadStart
и Action
определяются как
public delegate void ThreadStart();
public delegate void Action();
i.e., делегат без параметров и никакого возвращаемого значения. Таким образом, они семантически одинаковы.
Однако я бы использовал Action
, а не ThreadStart
, поскольку ThreadStart
сильно связан с конструктором Thread
, поэтому код с ThreadStart
может намекать на прямое создание потоков и, следовательно, слегка вводить в заблуждение.
Ответ 2
Похоже, что существует разница между ThreadStart
и Action
в контексте BeginInvoke
.
Они оба будут правильно выполнять код внутри делегата, как сказал Влад.
Однако, если в делегате возникает исключение, ThreadStart
приводит к TargetInvocationException
. Но использование Action
дает вам правильное исключение из делегата.
Action
должно быть предпочтительным по этой причине.
Посмотрите этот вопрос.