Working with asynchronous classes, often I find that I am always having to store state in fields so that I have access to them in the completed method. Ideally, I'd like to avoid having to store state in fields as this means I need to worry about multiple calls being made and their affect on the field data.
I wrote this block of code which could work, although Resharper gives me an 'access to modified disclosure' warning.
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();
}
Is there a problem with this block of code and if not, is there a better way to do this without creating fields to store data and ensure that some level of scope still exists?
 
     
    