async private Task <IEnumerable <UserEvents.MergeRequestEvent> > updateOneOnTimer(MergeRequestKey mrk) { if (_updating) { traceDetailed(String.Format("Cannot update !{0} in {1}", mrk.IId, mrk.ProjectKey.ProjectName)); await TaskUtils.WhileAsync(() => _updating); traceDetailed(String.Format("Skipped update for !{0} in {1}", mrk.IId, mrk.ProjectKey.ProjectName)); return(null); } IInternalCache oldDetails = _cache.Clone(); traceDetailed(String.Format("Ready to update !{0} in {1}", mrk.IId, mrk.ProjectKey.ProjectName)); try { _updating = true; if (_mergeRequestLoader != null) { await _mergeRequestLoader.LoadMergeRequest(mrk); } MergeRequestRefreshed?.Invoke(mrk); } catch (BaseLoaderException ex) { ExceptionHandlers.Handle("Cannot perform a one-shot update", ex); return(null); } finally { _updating = false; traceDetailed(String.Format("Updated !{0} in {1}", mrk.IId, mrk.ProjectKey.ProjectName)); } IEnumerable <UserEvents.MergeRequestEvent> updates = _checker.CheckForUpdates(oldDetails, _cache); int legalUpdates = updates.Count(x => x.Labels); Debug.Assert(legalUpdates == 0 || legalUpdates == 1); if (legalUpdates > 0) { traceInformation( String.Format( "Updated Labels: {0}. MRK: HostName={1}, ProjectName={2}, IId={3}", legalUpdates, mrk.ProjectKey.HostName, mrk.ProjectKey.ProjectName, mrk.IId)); } return(updates); }
private void onMergeRequestRefreshed(MergeRequestKey mrk) { _mergeRequestRefreshTimestamps[mrk] = DateTime.Now; MergeRequestRefreshed?.Invoke(mrk); }