internal IChangeToken GetOrAddFilePathChangeToken(string filePath) { if (!_filePathTokenLookup.TryGetValue(filePath, out var tokenInfo)) { var cancellationTokenSource = new CancellationTokenSource(); var cancellationChangeToken = new CancellationChangeToken(cancellationTokenSource.Token); tokenInfo = new ChangeTokenInfo(cancellationTokenSource, cancellationChangeToken); tokenInfo = _filePathTokenLookup.GetOrAdd(filePath, tokenInfo); } IChangeToken changeToken = tokenInfo.ChangeToken; if (PollForChanges) { // The expiry of CancellationChangeToken is controlled by this type and consequently we can cache it. // PollingFileChangeToken on the other hand manages its own lifetime and consequently we cannot cache it. var pollingChangeToken = new PollingFileChangeToken(new FileInfo(Path.Combine(_root, filePath))); if (UseActivePolling) { pollingChangeToken.ActiveChangeCallbacks = true; pollingChangeToken.CancellationTokenSource = new CancellationTokenSource(); PollingChangeTokens.TryAdd(pollingChangeToken, pollingChangeToken); } changeToken = new CompositeChangeToken( new[] { changeToken, pollingChangeToken, }); } return(changeToken); }
private IChangeToken GetOrAddWildcardChangeToken(string pattern) { ChangeTokenInfo tokenInfo; if (!_wildcardTokenLookup.TryGetValue(pattern, out tokenInfo)) { var cancellationTokenSource = new CancellationTokenSource(); var cancellationChangeToken = new CancellationChangeToken(cancellationTokenSource.Token); var matcher = new Matcher(StringComparison.OrdinalIgnoreCase); matcher.AddInclude(pattern); tokenInfo = new ChangeTokenInfo(cancellationTokenSource, cancellationChangeToken, matcher); tokenInfo = _wildcardTokenLookup.GetOrAdd(pattern, tokenInfo); } IChangeToken changeToken = tokenInfo.ChangeToken; if (_pollForChanges) { // The expiry of CancellationChangeToken is controlled by this type and consequently we can cache it. // PollingFileChangeToken on the other hand manages its own lifetime and consequently we cannot cache it. changeToken = new CompositeChangeToken( new[] { changeToken, new PollingWildCardChangeToken(_root, pattern) }); } return(changeToken); }
private IChangeToken GetOrAddFilePathChangeToken(string filePath) { ChangeTokenInfo tokenInfo; if (!_filePathTokenLookup.TryGetValue(filePath, out tokenInfo)) { var cancellationTokenSource = new CancellationTokenSource(); var cancellationChangeToken = new CancellationChangeToken(cancellationTokenSource.Token); tokenInfo = new ChangeTokenInfo(cancellationTokenSource, cancellationChangeToken); tokenInfo = _filePathTokenLookup.GetOrAdd(filePath, tokenInfo); } IChangeToken changeToken = tokenInfo.ChangeToken; if (_pollForChanges) { // The expiry of CancellationChangeToken is controlled by this type and consequently we can cache it. // PollingFileChangeToken on the other hand manages its own lifetime and consequently we cannot cache it. changeToken = new CompositeChangeToken( new[] { changeToken, new PollingFileChangeToken(new FileInfo(Path.Combine(_root, filePath))) }); } return(changeToken); }
private IChangeToken GetOrAddChangeToken(string filePath) { if (!FilePathTokenLookup.TryGetValue(filePath, out var tokenInfo)) { var cancellationTokenSource = new CancellationTokenSource(); var cancellationChangeToken = new CancellationChangeToken(cancellationTokenSource.Token); tokenInfo = new ChangeTokenInfo(cancellationTokenSource, cancellationChangeToken); tokenInfo = FilePathTokenLookup.GetOrAdd(filePath, tokenInfo); } return(tokenInfo.ChangeToken); }
private static void CancelToken(ChangeTokenInfo matchInfo) { if (matchInfo.TokenSource.IsCancellationRequested) { return; } Task.Factory.StartNew( _cancelTokenSource, matchInfo.TokenSource, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); }
private static void CancelToken(ChangeTokenInfo matchInfo) { if (matchInfo.TokenSource.IsCancellationRequested) { return; } Task.Run(() => { try { matchInfo.TokenSource.Cancel(); } catch { } }); }
private void SignalTokens(string[] keys) { foreach (var key in keys) { ChangeTokenInfo changeToken = null; if (_matchInfoCache.TryRemove(key, out changeToken)) { changeToken.TokenSource.Cancel(); } //if (_matchInfoCache.TryGetValue(filter, out changeToken)) //{ // // return existing token for this file path. // // yield return changeToken; // //var inMemoryChangeToken = changeToken as InMemoryChangeToken; // //if (inMemoryChangeToken != null) // //{ // // yield return inMemoryChangeToken; // //} //} } }
private IChangeToken GetOrAddChangeToken(string key, Action <ChangeTokenInfo> onNewTokenAdded) { ChangeTokenInfo fileToken; if (_matchInfoCache.TryGetValue(key, out fileToken)) { // return existing token for this file path. } else { // var newToken = new InMemoryChangeToken(); // var newToken = tokenFactory(); var cancellationTokenSource = new CancellationTokenSource(); var cancellationChangeToken = new CancellationChangeToken(cancellationTokenSource.Token); var tokenInfo = new ChangeTokenInfo(cancellationChangeToken, cancellationTokenSource); // tokenInfo = _wildcardTokenLookup.GetOrAdd(pattern, tokenInfo); fileToken = _matchInfoCache.GetOrAdd(key, tokenInfo); onNewTokenAdded(fileToken); } return(fileToken.ChangeToken); }