/// <summary> Watch a file for changes. public IChangeToken Watch(string filter) { if (_pollingInterval == null) { return(null); } _logger.LogDebug("Watching {0}", filter); var path = SplitObjectPath(filter); var token = new CloudStorageChangeToken(); var obj = GetObject(path); Task.Run(() => PollAsync(path, token, obj?.Generation)); return(token); }
async Task PollAsync(ObjectPath path, CloudStorageChangeToken token, long?generation) { while (true) { await Task.Delay(_pollingInterval.Value); try { var obj = GetObject(path); if (generation != obj?.Generation) { token.NotifyChanged(); return; } } catch (Exception e) { _logger.LogError(0, e, "Exception while watching {0}/{1}", path.BucketName, path.ObjectName); } } }