async Task CloseSessionAsync(Guid backgroundId) { Debug.WriteLine("MediaPlayerHandle.CloseSession() " + backgroundId); var mediaPlayerSession = _mediaPlayerSession; if (null == mediaPlayerSession) { return; } using (await _asyncLock.LockAsync(CancellationToken.None)) { if (!mediaPlayerSession.BackgroundId.HasValue || backgroundId != mediaPlayerSession.BackgroundId) { return; } if (ReferenceEquals(_mediaPlayerSession, mediaPlayerSession)) { _mediaPlayerSession = null; } mediaPlayerSession.Dispose(); _subscriptionHandle.Unsubscribe(); } }
async Task CloseSessionAsync(Guid backgroundId) { Debug.WriteLine("MediaPlayerHandle.CloseSession() " + backgroundId); var mediaPlayerSession = _mediaPlayerSession; if (null == mediaPlayerSession) return; using (await _asyncLock.LockAsync(CancellationToken.None)) { if (!mediaPlayerSession.BackgroundId.HasValue || backgroundId != mediaPlayerSession.BackgroundId) return; if (ReferenceEquals(_mediaPlayerSession, mediaPlayerSession)) _mediaPlayerSession = null; mediaPlayerSession.Dispose(); _subscriptionHandle.Unsubscribe(); } }
public async Task <MediaPlayerSession> OpenAsync() { Debug.WriteLine("MediaPlayerHandle.OpenAsync()"); for (var shutdownRetry = 0; shutdownRetry < 2; ++shutdownRetry) { MediaPlayerSession mediaPlayerSession = null; for (var retry = 0; retry < 3; ++retry) { using (await _asyncLock.LockAsync(CancellationToken.None).ConfigureAwait(false)) { mediaPlayerSession = _mediaPlayerSession; if (null != mediaPlayerSession) { return(mediaPlayerSession); } try { _subscriptionHandle.Subscribe(); var player = BackgroundMediaPlayer.Current; Guid?backgroundId = null; for (var loadRetry = 0; loadRetry < 4; ++loadRetry) { await Task.Delay(100 *(1 + loadRetry)).ConfigureAwait(false); backgroundId = BackgroundSettings.BackgroundId; if (backgroundId.HasValue) { break; } } if (backgroundId.HasValue) { for (var sessionRetry = 0; sessionRetry < 4; ++sessionRetry) { mediaPlayerSession = new MediaPlayerSession(player, backgroundId.Value, _notifier, OnCurrentStateChanged); _mediaPlayerSession = mediaPlayerSession; if (await mediaPlayerSession.OpenAsync().ConfigureAwait(false)) { return(mediaPlayerSession); } await Task.Delay(150 + 250 *sessionRetry).ConfigureAwait(false); } } else { Debug.WriteLine("MediaPlayerHandle.OpenAsync() no BackgroundId"); } } catch (Exception ex) { Debug.WriteLine("MediaPlayerHandle.OpenAsync() failed: " + ex.ExtendedMessage()); } _mediaPlayerSession = null; _subscriptionHandle.Unsubscribe(); } await Task.Delay(150 + 250 *retry).ConfigureAwait(false); } if (null != mediaPlayerSession) { mediaPlayerSession.Dispose(); } Shutdown(); await Task.Delay(450 *(1 + shutdownRetry)).ConfigureAwait(false); } return(null); }
public async Task<MediaPlayerSession> OpenAsync() { Debug.WriteLine("MediaPlayerHandle.OpenAsync()"); for (var shutdownRetry = 0; shutdownRetry < 2; ++shutdownRetry) { MediaPlayerSession mediaPlayerSession = null; for (var retry = 0; retry < 3; ++retry) { using (await _asyncLock.LockAsync(CancellationToken.None).ConfigureAwait(false)) { mediaPlayerSession = _mediaPlayerSession; if (null != mediaPlayerSession) return mediaPlayerSession; try { _subscriptionHandle.Subscribe(); var player = BackgroundMediaPlayer.Current; Guid? backgroundId = null; for (var loadRetry = 0; loadRetry < 4; ++loadRetry) { await Task.Delay(100 * (1 + loadRetry)).ConfigureAwait(false); backgroundId = BackgroundSettings.BackgroundId; if (backgroundId.HasValue) break; } if (backgroundId.HasValue) { for (var sessionRetry = 0; sessionRetry < 4; ++sessionRetry) { mediaPlayerSession = new MediaPlayerSession(player, backgroundId.Value, _notifier, OnCurrentStateChanged); _mediaPlayerSession = mediaPlayerSession; if (await mediaPlayerSession.OpenAsync().ConfigureAwait(false)) return mediaPlayerSession; await Task.Delay(150 + 250 * sessionRetry).ConfigureAwait(false); } } else Debug.WriteLine("MediaPlayerHandle.OpenAsync() no BackgroundId"); } catch (Exception ex) { Debug.WriteLine("MediaPlayerHandle.OpenAsync() failed: " + ex.ExtendedMessage()); } _mediaPlayerSession = null; _subscriptionHandle.Unsubscribe(); } await Task.Delay(150 + 250 * retry).ConfigureAwait(false); } if (null != mediaPlayerSession) mediaPlayerSession.Dispose(); Shutdown(); await Task.Delay(450 * (1 + shutdownRetry)).ConfigureAwait(false); } return null; }