public MockEventLoop(IBrowsingContext context) { _queues = new Dictionary <TaskPriority, Queue <TaskEventLoopEntry> >(); _count = 0; _current = null; //Scan(); }
public ICancellable Enqueue(Action<CancellationToken> task, TaskPriority priority) { var entry = new TaskEventLoopEntry(task); lock (this) { var entries = default(Queue<TaskEventLoopEntry>); if (!_queues.TryGetValue(priority, out entries)) { entries = new Queue<TaskEventLoopEntry>(); _queues.Add(priority, entries); } if (_current == null) { SetCurrent(entry); } else { entries.Enqueue(entry); } } return entry; }
public IEventLoopEntry Enqueue(Action <CancellationToken> task, TaskPriority priority) { var entry = new TaskEventLoopEntry(task); lock (this) { var entries = default(Queue <TaskEventLoopEntry>); if (!_queues.TryGetValue(priority, out entries)) { entries = new Queue <TaskEventLoopEntry>(); _queues.Add(priority, entries); } if (_current == null) { _current = entry; RunCurrent(); } else { entries.Enqueue(entry); } } return(entry); }
public ICancellable Enqueue(Action <CancellationToken> task, TaskPriority priority) { var entry = new TaskEventLoopEntry(task); lock (_lockObj) { Debug.WriteLine("Enter lock 1"); if (!_queues.TryGetValue(priority, out var entries)) { entries = new Queue <TaskEventLoopEntry>(); _queues.Add(priority, entries); } _count++; if (_current == null) { SetCurrent(entry); } else { entries.Enqueue(entry); } Debug.WriteLine("Exit lock 1"); } return(entry); }
private void Continue() { lock (this) { _current = null; } Spin(); }
void RunCurrent() { _current.Run(() => { lock (this) { _current = null; Spin(); } }); }
private void SetCurrent(TaskEventLoopEntry entry) { _current = entry; entry?.Run(() => { lock (_lockObj) { _current = null; SpinInternal(); } }); }
private void SetCurrent(TaskEventLoopEntry entry) { _current = entry; entry?.Run(() => { _count--; lock (_lockObj) { Debug.WriteLine("Enter lock 4"); _current = null; SpinInternal(); Debug.WriteLine("Exit lock 4"); } }); }
public void Spin() { lock (this) { if (_current != null && _current.IsRunning) { return; } _current = Dequeue(TaskPriority.Critical) ?? Dequeue(TaskPriority.Microtask) ?? Dequeue(TaskPriority.Normal) ?? Dequeue(TaskPriority.None); } if (_current != null) { RunCurrent(); } }
public ICancellable Enqueue(Action <CancellationToken> task, TaskPriority priority) { var entry = new TaskEventLoopEntry(task); lock (this) { if (!_queues.TryGetValue(priority, out var entries)) { entries = new Queue <TaskEventLoopEntry>(); _queues.Add(priority, entries); } if (_current == null) { SetCurrent(entry); } else { entries.Enqueue(entry); } } return(entry); }
private void SetCurrent(TaskEventLoopEntry entry) { _current = entry; entry?.Run(Continue); }
public TaskEventLoop() { _queues = new Dictionary<TaskPriority, Queue<TaskEventLoopEntry>>(); _current = null; }
public TaskEventLoop() { _queues = new Dictionary <TaskPriority, Queue <TaskEventLoopEntry> >(); _current = null; }