Асинхронные многоадресные делегаты
В последнее время я занимаюсь некоторой работой над проектом, который широко использует события. Одна из вещей, которые мне нужно сделать, - асинхронно вызывать несколько обработчиков событий в многоадресном делетете. Я думал, что трюк будет заключаться в вызове BeginInvoke для каждого элемента из GetInvocationList, но похоже, что BeginInvoke там не существует.
Есть ли способ сделать это или мне нужно начать использовать ThreadPool.QueueUserWorkItem и как-то рулоть свое решение таким образом?
Ответы
Ответ 1
GetInvocationList
просто возвращает массив типа Delegate
, который не знает соответствующей подписи. Тем не менее, вы можете передать каждое возвращаемое значение вашему конкретному типу делегата:
foreach (MyDelegate action in multicast.GetInvocationList())
{
action.BeginInvoke(...);
}