public IAsyncResult Begin <T>(AsyncCallback callback, object state, Func <AsyncCallback, object, IAsyncResult> beginOperation, Func <IAsyncResult, T> endOperation)
 {
     return(new OpenOnceManager.OpenOnceManagerAsyncResult <T>(this, this.openTimeout, callback, state, beginOperation, (IAsyncResult r, T & output) => {
         output = endOperation(r);
         return true;
     }));
 }
 public IAsyncResult Begin(AsyncCallback callback, object state, Func <AsyncCallback, object, IAsyncResult> beginOperation, Action <IAsyncResult> endOperation)
 {
     return(new OpenOnceManager.OpenOnceManagerAsyncResult <bool>(this, this.openTimeout, callback, state, beginOperation, (IAsyncResult r, bool& output) => {
         endOperation(r);
         output = true;
         return true;
     }));
 }