async Task UpdateQuickTasks (DocumentContext ctx, ParsedDocument doc, CancellationToken token)
		{
			if (isDisposed)
				return;
			var newTasks = ImmutableArray<QuickTask>.Empty.ToBuilder ();
			if (doc != null) {
				foreach (var cmt in await doc.GetTagCommentsAsync(token).ConfigureAwait (false)) {
					if (token.IsCancellationRequested)
						return;
					int offset;
					try {
						offset = textEditor.LocationToOffset (cmt.Region.Begin.Line, cmt.Region.Begin.Column);
					} catch (Exception) {
						return;
					}
					var newTask = new QuickTask (cmt.Text, offset, DiagnosticSeverity.Info);
					newTasks.Add (newTask);
				}

				foreach (var error in await doc.GetErrorsAsync(token).ConfigureAwait (false)) {
					if (token.IsCancellationRequested)
						return;
					if (ctx.IsAdHocProject && !lexicalError.Contains (error.Id))
						continue;
					int offset;
					try {
						offset = textEditor.LocationToOffset (error.Region.Begin.Line, error.Region.Begin.Column);
					} catch (Exception) {
						return;
					}
					var newTask = new QuickTask (error.Message, offset, error.ErrorType == MonoDevelop.Ide.TypeSystem.ErrorType.Error ? DiagnosticSeverity.Error : DiagnosticSeverity.Warning);
					newTasks.Add (newTask);
				}
			}
			if (token.IsCancellationRequested)
				return;
			Application.Invoke (delegate {
				if (token.IsCancellationRequested || isDisposed)
					return;
				tasks = newTasks.ToImmutable ();
				OnTasksUpdated (EventArgs.Empty);
			});
		}