#c# #events #asynchronous #delegates #task
#c# #Мероприятия #асинхронный #делегаты #задача
Вопрос:
Пытаюсь разобраться в классе Tasks, а точнее, в Task.Factory.FromAsync
методе.
В настоящее время в моем коде я делаю что-то вроде этого:
var handler = MyEvent;
if (handler != null)
{
handler.Invoke(this, e);
}
К сожалению, это синхронно, и я ищу асинхронную версию. Я мог бы использовать BeginInvoke и EndInvoke, но это кажется пустой тратой времени, учитывая, что мне не нужен обратный вызов. Кажется, я где-то слышал, что можно использовать одну из задач.Фабричные методы для упрощения этого вызова, когда фиктивный обратный вызов тогда не нужен. Кто-нибудь может меня просветить?
Ответ №1:
Несколько необычно вызывать обработчики событий асинхронно; если обработчик хочет обработать событие асинхронно, он должен сам запустить задачу.
Вы можете запустить задачу с помощью задачи.Метод Factory.StartNew*:
void MyClass_MyEvent(object sender, EventArgs e)
{
Task.Factory.StartNew(() =>
{
// do work
});
}
(* или метод Task.Run в асинхронном CTP или .NET 4.5)
Комментарии:
1. Спасибо за ответ.
// do work
В основном будет заменен примером кода, который я использовал в своем исходном сообщении?2. Мой код — это обработчик события, а не код, который вызывает событие.