public Task Create(int context) { lock (SyncObj) { RegisteredDelayTaskSource task = new RegisteredDelayTaskSource(DateTime.UtcNow.Ticks, context * TimeSpan.TicksPerMillisecond); DelayTaskList.Add(task); return(task.DelayTaskCompletionSource.Task); } }
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); }