使用异步类时,我经常发现必须将状态存储在字段中,以便在完成的方法中访问它们。理想情况下,我希望避免在字段中存储状态,因为这意味着我需要担心正在进行的多个调用及其对字段数据的影响。
我写的这段代码可以工作,尽管Resharper给了我一个"访问修改的披露"的警告。
public void Test(Action<Result> result)
{
var myClass = new MyClass();
EventHandler eventHandler = null;
eventHandler = (s, e) =>
{
var mc = (MyClass) s;
mc.Completed -= eventHandler;
result(mc.Result);
};
myClass.Completed += eventHandler;
myClass.Run();
}
这个代码块是否有问题,如果没有,是否有更好的方法来做到这一点,而不创建字段来存储数据,并确保某种程度的作用域仍然存在?
在这种情况下使用匿名委托绝对没问题。有关特定ReSharper警告的讨论,请参见下面的问题,其中详细讨论了它:
对修改闭包的访问
我使用你经常在WPF/Silverlight/WP7应用程序中演示的模式,当你想在UI首次加载或渲染时只执行一次代码。