Корректный путь к "Выпустил-забыл" асинхронный делегат

Считайте меня ржавым на предмет асинхронных делегатов.

Если я хочу назвать метод асинхронно в стиле "выпустил-забыл", действительно ли это - соответствующий способ сделать это?

Action action = DoSomething;
action.BeginInvoke(action.EndInvoke, null);

DoSomething() метод ловит все исключения и соглашения с ними внутренне.

Вызов к EndInvoke соответствующий? Необходимый?

Существует ли более ясный способ достигнуть того же поведения?

7
задан Paul Turner 13 April 2010 в 14:48
поделиться

2 ответа

"Старая школа" в .NET 3.5 заключается в использовании ThreadPool :

ThreadPool.QueueUserWorkItem(s => DoSomething());

Если вы предпочитаете использовать асинхронные делегаты, тогда вы должны знать, что вызов EndInvoke необходим , даже если у вас нет дополнительного кода, который вы хотите выполнить при обратном вызове.

5
ответ дан 6 December 2019 в 08:42
поделиться

Новый способ (в .NET 4) сделать это:

Task.Factory.StartNew(() => DoSomething());
11
ответ дан 6 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: