Esempio n. 1
0
 public Task Create(int context)
 {
     lock (SyncObj)
     {
         RegisteredDelayTaskSource task = new RegisteredDelayTaskSource(DateTime.UtcNow.Ticks, context * TimeSpan.TicksPerMillisecond);
         DelayTaskList.Add(task);
         return(task.DelayTaskCompletionSource.Task);
     }
 }
Esempio n. 2
0
        private bool PollRegisterTaskSourceList()
        {
            //You may wonder why I'm doing things so oddly here
            //There seemed to be some issues with completing the task within the loop.
            //might actually be incorrect IL being generated??
            RegisteredDelayTaskSource finished = null;

            bool isTaskFired = false;
            long time        = DateTime.UtcNow.Ticks;

            foreach (RegisteredDelayTaskSource source in DelayTaskList)
            {
                if (source.isCompleted(time))
                {
                    finished    = source;
                    isTaskFired = true;
                    break;
                }
            }

            if (isTaskFired)
            {
                finished.DelayTaskCompletionSource.SetResult(true);
            }

            if (isTaskFired)
            {
                if (DelayTaskList.Count == 0)
                {
                    DelayTaskList.Clear();
                }
                else
                {
                    DelayTaskList.Remove(finished);
                }
            }

            return(isTaskFired);
        }