public IDisposable MonitorState(string item, Action <string> updatedStateCallback) { var hasCache = itemState.TryGetValue(item, out var oldstate); var monitor = new MonitorDisposable(this, item, updatedStateCallback); lock (monitors) { monitors.Add(monitor); } EnsureBackgroundTaskState(); GetState(item).ContinueWith(t => { if (t.IsCompletedSuccessfully) { if (hasCache && oldstate == t.Result) { monitor.Callback(t.Result); } } }); return(monitor); }
private void StopMonitoring(MonitorDisposable disposable) { lock (monitors) { monitors.Remove(disposable); } EnsureBackgroundTaskState(); }