public async Task AcceptSessionAsync()

in src/DurableTask.Emulator/PeekLockSessionQueue.cs [160:194]


        public async Task<TaskSession> AcceptSessionAsync(TimeSpan receiveTimeout, CancellationToken cancellationToken)
        {
            Stopwatch timer = Stopwatch.StartNew();
            while (timer.Elapsed < receiveTimeout && !cancellationToken.IsCancellationRequested)
            {
                lock (this.thisLock)
                {
                    foreach (TaskSession ts in this.sessionQueue)
                    {
                        if (ts.Messages.Count > 0 && !ts.Messages.Any(m => m.Event is ExecutionStartedEvent ese && ese.ScheduledStartTime > DateTime.UtcNow))
                        {
                            this.lockedSessionQueue.Add(ts);
                            this.sessionQueue.Remove(ts);

                            // all messages are now locked
                            foreach (TaskMessage tm in ts.Messages)
                            {
                                ts.LockTable.Add(tm);
                            }

                            return ts;
                        }
                    }
                }

                await Task.Delay(TimeSpan.FromMilliseconds(500), cancellationToken);
            }

            if (cancellationToken.IsCancellationRequested)
            {
                throw new TaskCanceledException();
            }

            return null;
        }