private void GiveBackContext(UploadWorkerContext context) { lock (this) { Ticket ticket; do { if (Queue.Count == 0) { AvailableContexts.Enqueue(context); return; } else { ticket = Queue.First.Value; Queue.RemoveFirst(); RenumberTickets(); } } while (!ticket.CompletionSource.TrySetResult(context)); ticket.Context = context; // just in case they're not waiting RIGHT NOW } }
public async Task <UploadWorkerContext> GetContext() { return(Context = await ContextTask); }
public Ticket(Action <Ticket> onDispose, UploadWorkerContext task) : this(onDispose) { ContextTask = Task.FromResult(Context = task); }