Exemplo n.º 1
0
        public void Transaction(
            string name,
            TimeSpan delayBeforeRetry,
            int maxRetries,
            TransactionRetryType retryType,
            TransactionFunction preMulti,
            TransactionFunction postMulti
            )
        {
            Random r = null;

            int tryCount = 0;

            while (true)
            {
                preMulti();
                RedisCommand("MULTI");
                postMulti();
                var result = RedisCommand <List <string> >("EXEC");

                if (result != null)
                {
                    break;
                }

                tryCount += 1;
                if (tryCount > maxRetries)
                {
                    throw new NhiredisException("Transaction failed: " + name);
                }

                if (retryType == TransactionRetryType.Predictable)
                {
                    Thread.Sleep(delayBeforeRetry);
                }
                else
                {
                    if (r == null)
                    {
                        r = new Random(DateTime.Now.Millisecond);
                    }
                    double maxDelay = delayBeforeRetry.TotalMilliseconds;
                    double delay    = maxDelay * (r.NextDouble() * 0.9 + 0.1);
                    Thread.Sleep(TimeSpan.FromMilliseconds(delay));
                }
            }
        }
        public void Transaction(
            string name,
            TimeSpan delayBeforeRetry,
            int maxRetries,
            TransactionRetryType retryType,
            TransactionFunction preMulti,
            TransactionFunction postMulti
            )
        {
            Random r = null;

            int tryCount = 0;
            while (true)
            {
                preMulti();
                RedisCommand("MULTI");
                postMulti();
                var result = RedisCommand<List<string>>("EXEC");

                if (result != null)
                {
                    break;
                }

                tryCount += 1;
                if (tryCount > maxRetries)
                {
                    throw new NhiredisException("Transaction failed: " + name);
                }

                if (retryType == TransactionRetryType.Predictable)
                {
                    Thread.Sleep(delayBeforeRetry);
                }
                else
                {
                    if (r == null)
                    {
                        r = new Random(DateTime.Now.Millisecond);
                    }
                    double maxDelay = delayBeforeRetry.TotalMilliseconds;
                    double delay = maxDelay * (r.NextDouble() * 0.9 + 0.1);
                    Thread.Sleep(TimeSpan.FromMilliseconds(delay));
                }
            }
        }
Exemplo n.º 3
0
 // #end example
 // #example: The write transaction method
 public T InReadTransaction <T>(TransactionFunction <T> transactionClosure)
 {
     transactionLock.EnterReadLock();
     try
     {
         return(transactionClosure(database));
     }
     catch (Exception)
     {
         database.Rollback();
         throw;
     }
     finally
     {
         database.Commit();
         transactionLock.ExitReadLock();
     }
 }
Exemplo n.º 4
0
 // #example: A transaction method
 public T InTransaction <T>(TransactionFunction <T> transactionClosure)
 {
     lock (transactionLock)
     {
         try
         {
             return(transactionClosure(database));
         }
         catch (Exception)
         {
             database.Rollback();
             throw;
         }
         finally
         {
             database.Commit();
         }
     }
 }
Exemplo n.º 5
0
        /// <summary>
        /// Delete overdue books.
        /// </summary>
        public async void RunTransaction()
        {
            if (mCloudDBZone == null)
            {
                ShowResultPopup("Please open CloudDBZone first!");
                return;
            }

            CloudDBZoneQuery query = CloudDBZoneQuery.Where(Java.Lang.Class.ForName("com.company.project.BookInfo")).
                                     LessThan(BookEditFields.PublishTime, DateUtils.ParseDate("2020-12-04"));

            Transaction.IFunction function = new TransactionFunction((transaction) => {
                try
                {
                    System.Collections.IList bookInfos = transaction.ExecuteQuery(query);
                    IList <CloudDBZoneObject> bookList = new List <CloudDBZoneObject>();
                    foreach (Java.Lang.Object item in bookInfos)
                    {
                        bookList.Add((CloudDBZoneObject)item);
                    }
                    transaction.ExecuteDelete(bookList);
                }
                catch (AGConnectCloudDBException e)
                {
                    ShowResultPopup("Transaction.IFunction exception: " + e.ErrMsg);
                }
            });

            try
            {
                await mCloudDBZone.RunTransactionAsync(function);

                ShowResultPopup("RunTransaction executed successfully");
            }
            catch (Exception e)
            {
                ShowResultPopup("RunTransaction failed: " + e.Message);
            }
        }
Exemplo n.º 6
0
        public List <TransactionDTO> showTransaction()
        {
            var id = Helper.getCurrentUserId(Request.GetRequestContext());

            return(TransactionFunction.showTransaction(id));
        }
Exemplo n.º 7
0
        public bool CreatTransaction([FromUri] int supplyId, [FromUri] int demanedId)
        {
            var id = Helper.getCurrentUserId(Request.GetRequestContext());

            return(TransactionFunction.CreatTransaction(supplyId, demanedId, id));
        }