Task Update()
        {
            Debug.WriteLine("SmtcMetadataHandler.Update()");

            try
            {
                var smtc = _systemMediaTransportControls;

                var position = _getPosition();

                TimeSpan?nextEvent = null;

                lock (_lock)
                {
                    nextEvent = _metadataSink.Update(_state, position);
                }

                var title  = GetTitle();
                var artist = GetArtist();

                if (title != _title || artist != _artist)
                {
                    Debug.WriteLine("SmtcMetadataHandler.Update() set " + title);

                    _title  = title;
                    _artist = artist;

                    smtc.DisplayUpdater.ClearAll();
                    smtc.DisplayUpdater.Type = MediaPlaybackType.Music;

                    var properties = smtc.DisplayUpdater.MusicProperties;

                    if (null != title)
                    {
                        properties.Title = title;
                    }

                    if (null != artist)
                    {
                        properties.Artist = artist;
                    }

                    smtc.DisplayUpdater.Update();

                    _notifier.Notify(BackgroundNotificationType.Track, title);
                }

                if (nextEvent.HasValue && nextEvent > position)
                {
                    if (nextEvent.Value != _lastReport)
                    {
                        _lastReport = nextEvent.Value;
                        _reportNextEvent(_lastReport);
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("SmtcMetadataSink.Update() failed: " + ex.Message);
            }

            return(TplTaskExtensions.CompletedTask);
        }