Beispiel #1
0
 private void ExecuteBatch(Action <IStorageActionsAccessor> action)
 {
     Interlocked.Exchange(ref lastUsageTime, SystemTime.UtcNow.ToBinary());
     using (tableStroage.BeginTransaction())
     {
         var storageActionsAccessor = new StorageActionsAccessor(tableStroage, uuidGenerator, DocumentCodecs, documentCacher);
         current.Value = storageActionsAccessor;
         action(current.Value);
         storageActionsAccessor.SaveAllTasks();
         tableStroage.Commit();
         storageActionsAccessor.InvokeOnCommit();
     }
 }
Beispiel #2
0
 private StorageActionsAccessor ExecuteBatch(Action <IStorageActionsAccessor> action)
 {
     Interlocked.Exchange(ref lastUsageTime, SystemTime.UtcNow.ToBinary());
     using (tableStorage.BeginTransaction())
     {
         var storageActionsAccessor = new StorageActionsAccessor(tableStorage, uuidGenerator, DocumentCodecs, documentCacher);
         if (disableBatchNesting.Value == null)
         {
             current.Value = storageActionsAccessor;
         }
         action(storageActionsAccessor);
         storageActionsAccessor.SaveAllTasks();
         tableStorage.Commit();
         return(storageActionsAccessor);
     }
 }
Beispiel #3
0
        public void Batch(Action <IStorageActionsAccessor> action)
        {
            if (disposerLock.IsReadLockHeld)             // we are currently in a nested Batch call
            {
                if (current.Value != null)               // check again, just to be sure
                {
                    action(current.Value);
                    return;
                }
            }
            disposerLock.EnterReadLock();
            try
            {
                if (disposed)
                {
                    Trace.WriteLine("TransactionalStorage.Batch was called after it was disposed, call was ignored.");
                    return;                     // this may happen if someone is calling us from the finalizer thread, so we can't even throw on that
                }


                Interlocked.Exchange(ref lastUsageTime, SystemTime.Now.ToBinary());
                using (tableStroage.BeginTransaction())
                {
                    var storageActionsAccessor = new StorageActionsAccessor(tableStroage, uuidGenerator, DocumentCodecs, documentCacher);
                    current.Value = storageActionsAccessor;
                    action(current.Value);
                    storageActionsAccessor.SaveAllTasks();
                    tableStroage.Commit();
                    storageActionsAccessor.InvokeOnCommit();
                }
            }
            finally
            {
                disposerLock.ExitReadLock();
                if (disposed == false)
                {
                    current.Value = null;
                }
            }
            onCommit();             // call user code after we exit the lock
        }
		private void ExecuteBatch(Action<IStorageActionsAccessor> action)
		{
			Interlocked.Exchange(ref lastUsageTime, SystemTime.UtcNow.ToBinary());
			using (tableStroage.BeginTransaction())
			{
				var storageActionsAccessor = new StorageActionsAccessor(tableStroage, uuidGenerator, DocumentCodecs, documentCacher);
				current.Value = storageActionsAccessor;
				action(current.Value);
				storageActionsAccessor.SaveAllTasks();
				storageActionsAccessor.InvokePreCommit();
				tableStroage.Commit();
				storageActionsAccessor.InvokeOnCommit();
			}
		}
		public void Batch(Action<IStorageActionsAccessor> action)
		{
			if (disposerLock.IsReadLockHeld) // we are currently in a nested Batch call
			{
				if (current.Value != null) // check again, just to be sure
				{
					action(current.Value);
					return;
				}
			}
		    disposerLock.EnterReadLock();
			try
			{
				if (disposed)
				{
					Trace.WriteLine("TransactionalStorage.Batch was called after it was disposed, call was ignored.");
					return; // this may happen if someone is calling us from the finalizer thread, so we can't even throw on that
				}
					

				Interlocked.Exchange(ref lastUsageTime, SystemTime.Now.ToBinary());
				using (tableStroage.BeginTransaction())
				{
					var storageActionsAccessor = new StorageActionsAccessor(tableStroage, uuidGenerator, DocumentCodecs, documentCacher);
					current.Value = storageActionsAccessor;
					action(current.Value);
					storageActionsAccessor.SaveAllTasks();
					tableStroage.Commit();
					storageActionsAccessor.InvokeOnCommit();
				}
			}
			finally
			{
				disposerLock.ExitReadLock();
				if(disposed ==false)
					current.Value = null;
			}
			onCommit(); // call user code after we exit the lock
		}
Beispiel #6
0
		private StorageActionsAccessor ExecuteBatch(Action<IStorageActionsAccessor> action)
		{
			Interlocked.Exchange(ref lastUsageTime, SystemTime.UtcNow.ToBinary());
			using (tableStorage.BeginTransaction())
			{
				var storageActionsAccessor = new StorageActionsAccessor(tableStorage, uuidGenerator, DocumentCodecs, documentCacher);
				if (disableBatchNesting.Value == null)
					current.Value = storageActionsAccessor;
				action(storageActionsAccessor);
				storageActionsAccessor.SaveAllTasks();
				tableStorage.Commit();
				return storageActionsAccessor;
			}
		}