コード例 #1
0
        /// <summary>
        /// Rollbacks the Ream transaction that is active on this thread.
        /// </summary>
        public void RollbackTransaction()
        {
            if (!InTransaction)
            {
                throw new RealmThreadNotInTransaction("No active transaction on this thread");
            }

            Action <Realms.Realm> action = (r) =>
            {
                try
                {
                    realmThread.trans.Rollback();
                }
                finally
                {
                    realmThread.trans = null;
                }
            };

            using (var waitEvent = new ManualResetEventSlim(false))
            {
                var workItem = new RealmWork(action, waitEvent);
                workQueue.Add(workItem);
                waitEvent.Wait();
            }
        }
コード例 #2
0
        /// <summary>
        /// Invokes a 'Fire and Forget' Action on an independent Realm thread.
        /// </summary>
        /// <param name="action">Action.</param>
        public void BeginInvoke(Action <Realms.Realm> action)
        {
            if (action == null)
            {
                throw new ArgumentNullException(nameof(action));
            }

            var workItem = new RealmWork(action);

            workQueue.Add(workItem);
        }
コード例 #3
0
        /// <summary>
        /// Invoke the specified action on an independent Realm thread.
        /// </summary>
        /// <param name="action">Action.</param>
        public void Invoke(Action <Realms.Realm> action)
        {
            if (action == null)
            {
                throw new ArgumentNullException(nameof(action));
            }

            using (var waitEvent = new ManualResetEventSlim(false))
            {
                var workItem = new RealmWork(action, waitEvent);
                workQueue.Add(workItem);
                waitEvent.Wait();
            }
        }
コード例 #4
0
        /// <summary>
        /// Invoke an Task on an independent Realm thread.
        /// </summary>
        /// <returns>Task</returns>
        /// <param name="func">Func.</param>
        public Task InvokeAsync(Func <Realms.Realm, Task> func)
        {
            if (func == null)
            {
                throw new ArgumentNullException(nameof(func));
            }

            using (var wait = new ManualResetEventSlim(false))
            {
                var workItem = new RealmWork(func, wait, null);
                workQueue.Add(workItem);
                wait.Wait();
                return(Task.FromResult(true));
            }
        }
コード例 #5
0
        /// <summary>
        /// Begin a Realm transaction on this thread.
        /// </summary>
        public void BeginTransaction()
        {
            if (InTransaction)
            {
                throw new RealmThreadInTransaction("Currently this RealmThread is already in a transaction");
            }

            Action <Realms.Realm> action = (r) =>
            {
                realmThread.trans = r.BeginWrite();
            };

            using (var waitEvent = new ManualResetEventSlim(false))
            {
                var workItem = new RealmWork(action, waitEvent);
                workQueue.Add(workItem);
                waitEvent.Wait();
            }
        }