Как использовать Задачи для упрощения Delegate.BeginInvoke / Delegate.EndInvoke? - PullRequest
2 голосов
/ 29 сентября 2011

Пытаясь обернуть голову вокруг класса Tasks, а точнее, метода Task.Factory.FromAsync.

В настоящее время в моем коде я делаю что-то вроде этого:

var handler = MyEvent;

if (handler != null)
{
    handler.Invoke(this, e);
}

К сожалению, это синхронно, и я ищу асинхронную версию.Я мог бы использовать BeginInvoke и EndInvoke, но это кажется пустой тратой, учитывая, что мне не нужен обратный вызов.Я полагаю, что где-то слышал, что можно использовать один из методов Task.Factory, чтобы упростить этот вызов, когда в этом случае не понадобится фиктивный обратный вызов.Может ли кто-нибудь просветить меня?

1 Ответ

0 голосов
/ 29 сентября 2011

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

Вы можете запустить задачу с помощью метода Task.Factory.StartNew *:

void MyClass_MyEvent(object sender, EventArgs e)
{
    Task.Factory.StartNew(() =>
    {
        // do work
    });
}

(* или Метод Task.Run в Async CTP или .NET 4.5)

...