Действие <T>Огонь и забыть? - PullRequest
0 голосов
/ 14 апреля 2011

Можно ли безопасно использовать Action, чтобы по существу запустить и забыть метод с возвращаемым типом void таким образом?

    public static void BeginAction(Foo input, Action<Foo> action)
    {
        action.BeginInvoke(input, EndAction, action); 
    }

    public static void EndAction(IAsyncResult result)
    {
        (result.AsyncState as Action).EndInvoke(result); 
    }

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

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

0 голосов
/ 14 апреля 2011

Одна из проблем, с которой вы столкнетесь, - это закрытие приложения.Когда пользователь хочет закрыть ваше приложение, как вы (а) ожидаете завершения всех этих действий «забей и забудь» или (б) завершите их изящно?

Если вам нужнобеспокойтесь о любой из этих вещей, тогда «забей и забудь», вероятно, не сработает.

...