public void Enqueue(WorkItem item) { this.UpdateLastAccessTime(); // Project work item = item.With(documentId: null, projectId: item.ProjectId, asyncToken: this.Processor._listener.BeginAsyncOperation("WorkItem")); var added = _workItemQueue.AddOrReplace(item); Logger.Log(FunctionId.WorkCoordinator_Project_Enqueue, s_enqueueLogger, Environment.TickCount, item.ProjectId, !added); SolutionCrawlerLogger.LogWorkItemEnqueue(this.Processor._logAggregator, item.ProjectId); }
public void Enqueue(WorkItem item) { Contract.ThrowIfFalse(item.DocumentId != null, "can only enqueue a document work item"); // we only put workitem in high priority queue if there is a text change. // this is to prevent things like opening a file, changing in other files keep enqueuing // expensive high priority work. if (!item.InvocationReasons.Contains(PredefinedInvocationReasons.SyntaxChanged)) { return; } // check whether given item is for active document, otherwise, nothing to do here if (_processor._documentTracker == null || _processor._documentTracker.GetActiveDocument() != item.DocumentId) { return; } // we need to clone due to waiter EnqueueActiveFileItem(item.With(Listener.BeginAsyncOperation("ActiveFile"))); }
public void Enqueue(WorkItem item) { this.UpdateLastAccessTime(); // Project work item = item.With(documentId: null, projectId: item.ProjectId, asyncToken: this.Processor._listener.BeginAsyncOperation("WorkItem")); var added = _workItemQueue.AddOrReplace(item); // lower priority queue gets lowest time slot possible. if there is any activity going on in higher queue, it drop whatever it has // and let higher work item run CancelRunningTaskIfHigherQueueHasWorkItem(); Logger.Log(FunctionId.WorkCoordinator_Project_Enqueue, s_enqueueLogger, Environment.TickCount, item.ProjectId, !added); SolutionCrawlerLogger.LogWorkItemEnqueue(this.Processor._logAggregator, item.ProjectId); }