/// <summary>
        /// Forward event
        /// </summary>
        /// <param name="sender"></param>
        void OnEvent(object sender)
        {
            var _observer = observer;

            if (_observer == null)
            {
                return;
            }

            // Figure out change type
            bool exists   = fileProvider.GetFileInfo(FilePath).Exists;
            bool _existed = Interlocked.CompareExchange(ref existed, exists ? 1 : 0, existed) == 1;

            WatcherChangeTypes changeType = default;

            if (_existed)
            {
                changeType = exists ? WatcherChangeTypes.Changed : WatcherChangeTypes.Deleted;
            }
            else
            {
                changeType = exists ? WatcherChangeTypes.Created : WatcherChangeTypes.Deleted;
            }

            IAssetSourceEvent ae = new AssetSourceChangedEvent(assetSource, changeType);

            observer.OnNext(ae);
        }
        /// <summary>
        /// Forward event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnEvent(object sender, FileSystemEventArgs e)
        {
            var _observer = Observer;

            if (_observer == null)
            {
                return;
            }
            IAssetSourceEvent ae = new AssetSourceChangedEvent(AssetSource, e.ChangeType);

            Observer.OnNext(ae);
        }