Считайте меня ржавым на предмет асинхронных делегатов.
Если я хочу назвать метод асинхронно в стиле "выпустил-забыл", действительно ли это - соответствующий способ сделать это?
Action action = DoSomething;
action.BeginInvoke(action.EndInvoke, null);
DoSomething()
метод ловит все исключения и соглашения с ними внутренне.
Вызов к EndInvoke
соответствующий? Необходимый?
Существует ли более ясный способ достигнуть того же поведения?
"Старая школа" в .NET 3.5 заключается в использовании ThreadPool
:
ThreadPool.QueueUserWorkItem(s => DoSomething());
Если вы предпочитаете использовать асинхронные делегаты, тогда вы должны знать, что вызов EndInvoke
необходим , даже если у вас нет дополнительного кода, который вы хотите выполнить при обратном вызове.
Новый способ (в .NET 4) сделать это:
Task.Factory.StartNew(() => DoSomething());