可以安全地使用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);
}
答案 0 :(得分:2)
如果您确保拨打EndInvoke()
,那么是。如果您忘记调用EndInvoke()
并且Action具有返回值或抛出异常,那么它可能导致资源未被释放(.NET不会丢弃结果或异常,它将保留它们直到EndInvoke()
来电声称他们。)
答案 1 :(得分:0)
您遇到的一个问题是app shutdown。当用户想要关闭你的应用程序时,你如何(a)等待所有这些“即发即弃”的动作完成,或者(b)优雅地终止它们?
如果您需要担心这些事情中的任何一个,那么“即发即忘”可能无法正常运作。