private void OnSingleActionCompleted(IAsyncResult asyncResult, AsyncCallInfo callInfo)
 {
     //???
     Interlocked.Decrement(ref callInfo.PendingOps);
     if (callInfo.PendingOps == 0)
     {
         callInfo.Callback(callInfo);
     }
 }
    public IAsyncResult BeginMultipleActions(IEnumerable <string> names,
                                             AsyncCallback callback, object state)
    {
        var callInfo = new AsyncCallInfo {
            Callback   = callback,
            AsyncState = state
        };

        callInfo.PendingOps = names.Count();
        foreach (string name in names)
        {
            library.BeginAction(name, ar => OnSingleActionCompleted(ar, callInfo), null);
        }
        return(callInfo);
    }