Пример #1
0
		public static TimedLock Lock(object o, TimeSpan timeout)
		{
			TimedLock tl = new TimedLock(o);
			if (!Monitor.TryEnter(o, timeout))
			{
#if DEBUG
            System.GC.SuppressFinalize(tl.leakDetector);
#endif
				throw new LockTimeoutException();
			}

			return tl;
		}
Пример #2
0
        public static TimedLock Lock(object o, TimeSpan timeout)
        {
            TimedLock tl = new TimedLock(o);

            if (!Monitor.TryEnter(o, timeout))
            {
#if DEBUG
                System.GC.SuppressFinalize(tl.leakDetector);
#endif
                throw new LockTimeoutException();
            }

            return(tl);
        }
Пример #3
0
 /// <summary>
 /// Resets the Enqueued time for this job. Used for promotion algorithm.
 /// Locks: this.SyncRoot
 /// </summary>
 internal void ResetEnqueued()
 {
     try
     {
         using (TimedLock.Lock(SyncRoot)) // this.SyncRoot
         {
             m_Enqueued = DateTime.Now;
         }
     }
     catch (Exception e)
     {
         System.Console.WriteLine("Exception Caught in JobManager code: " + e.Message);
         System.Console.WriteLine(e.StackTrace);
     }
 }
Пример #4
0
 /// <summary>
 /// Removes this job from the JobManager, if it has not yet began working. There is no way to restart an aborted job, a new one must be created.
 /// Locks: this.SyncRoot->JobManager.m_ThreadStatsLock
 /// </summary>
 public void Abort()
 {
     try
     {
         using (TimedLock.Lock(SyncRoot))                 // this.SyncRoot
         {
             m_Worker = null;
             m_Status = JobStatus.Aborted;
             JobManager.AbortedJobs++;
         }
     }
     catch (LockTimeoutException e)
     {
         Console.WriteLine("\n\nDeadlock detected!\n");
         Console.WriteLine(e.ToString());
     }
 }
Пример #5
0
        /// <summary>
        /// Calls the work-completed delegate.
        /// Locks: this->SyncRoot
        /// </summary>
        internal void DoCompleted()
        {
            try
            {
                JobCompletedCallback cb;
                using (TimedLock.Lock(SyncRoot)) // this.SyncRoot
                {
                    if (m_Completed == null)
                    {
                        return;
                    }

                    cb = m_Completed;
                }

                cb(this);
            }
            catch (Exception e)
            {
                System.Console.WriteLine("Exception Caught in JobManager code: " + e.Message);
                System.Console.WriteLine(e.StackTrace);
            }
        }