private void Enc0Falling(object sender, PinValueChangedEventArgs pinValueChangedEventArgs) { Enc0Deboucer.Debouce(() => { Pushed?.Invoke(this, new EventArgs()); //Console.WriteLine("ENC0 push"); }); }
/// <summary> /// Perform an action when configuration changes. Note this requires config sources to be added with /// `reloadOnChange` enabled /// </summary> /// <param name="config">Configuration to watch for changes</param> /// <param name="action">Action to perform when <paramref name="config"/> is changed</param> /// <param name="delayInMilliseconds">Delay In Milliseconds</param> public static void OnChange(this IConfiguration config, Action action, int delayInMilliseconds = 500) { // IConfiguration's change detection is based on FileSystemWatcher, which will fire multiple change // events for each change - Microsoft's code is buggy in that it doesn't bother to debounce/dedupe // https://github.com/aspnet/AspNetCore/issues/2542 var debouncer = new Debouncer(TimeSpan.FromMilliseconds(delayInMilliseconds)); ChangeToken.OnChange <object>(config.GetReloadToken, _ => debouncer.Debouce(action), null); }
// private readonly string _memberName; public OptionsItemChangesMonitor( IOptionsMonitor <TOptions> optionsMonitor, ILogger <OptionsItemChangesMonitor <TKey, TOptions, TOptionsItem> > logger, IEnumerable <KeyedItemsAccessor <TOptions, TOptionsItem, TKey> > itemAccessors ) { // _optionsMonitor = optionsMonitor; _instance = optionsMonitor.CurrentValue; _logger = logger; _itemAccessors = itemAccessors.ToList(); // _itemsAccessor = itemsAccessor; _differ = new OptionsItemsDiffer <TKey, TOptions, TOptionsItem>(); // _itemAccessorExpression.Body.pro var debouncer = new Debouncer(TimeSpan.FromMilliseconds(500)); _listening = optionsMonitor.OnChange((a) => debouncer.Debouce(() => OnChanged(a))); }