Action< T>烧了就忘了

本文关键字:忘了 Action | 更新日期: 2023-09-27 17:50:13

可以安全地使用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); 
    }

Action< T>烧了就忘了

如果您确保调用EndInvoke(),那么是。如果忘记调用EndInvoke(),并且Action有返回值或抛出异常,则可能导致资源未被释放。. NET不会丢弃结果或异常,它将保留它们,直到EndInvoke()调用声明它们)。

你会遇到的一个问题是应用程序关闭。当用户想要关闭您的应用程序时,您如何(a)等待所有这些"即发即忘"操作完成,或者(b)优雅地终止它们?

如果你需要担心这两件事中的任何一件,那么"炒了就忘了"可能行不通。