protected void HandleEnded(WorkUnit sender, WorkEventArgs e)
 {
     sender.Ended -= HandleEnded;
     if (_workUnits.Any(w => w != sender && !w.HasEnded))
     {
         return;
     }
     EndTransaction(_workUnits.All(w => w.IsComplete));
 }
        public WorkUnit Begin()
        {
            if (_transaction == null || !_transaction.IsActive)
            {
                _transaction = _session.BeginTransaction();
            }
            var work = new WorkUnit();

            work.Ended += HandleEnded;
            _workUnits.Add(work);
            return(work);
        }