private void StartTask <TArg>(Func <TArg, Task> action, TArg arg, MarshaledTaskCompletionSource tcs) { try { SetupTask(action(arg), tcs); } catch (Exception e) { tcs.SetException(e); } }
private void SetupTask(Task task, MarshaledTaskCompletionSource tcs) { task.ContinueWith(t => { if (t.IsFaulted) { tcs.SetException(t.Exception.InnerException); } else { tcs.SetResult(); } }, TaskScheduler.Default); }
/// <summary> /// Seeks to next track. /// </summary> /// <param name="tcs">The task completion source.</param> public void NextTrack(MarshaledTaskCompletionSource tcs) { StartTask(_audioSource.NextTrackAsync, tcs); }
/// <summary> /// Deactivates the audio source. /// </summary> /// <param name="tcs">The task completion source.</param> public void Deactivate(MarshaledTaskCompletionSource tcs) { StartTask(_audioSource.DeactivateAsync, tcs); }
/// <summary> /// Sets the repeat mode. /// </summary> /// <param name="repeatMode">The repeat mode.</param> /// <param name="tcs">The task completion source.</param> public void SetRepeatMode(RepeatMode repeatMode, MarshaledTaskCompletionSource tcs) { StartTask(_audioSource.SetRepeatModeAsync, repeatMode, tcs); }
/// <summary> /// Sets the shuffle mode. /// </summary> /// <param name="shuffle">The shuffle.</param> /// <param name="tcs">The task completion source.</param> public void SetShuffle(bool shuffle, MarshaledTaskCompletionSource tcs) { StartTask(_audioSource.SetShuffleAsync, shuffle, tcs); }
/// <summary> /// Sets the playback progress. /// </summary> /// <param name="newProgress">The new progress.</param> /// <param name="tcs">The task completion source.</param> public void SetPlayback(TimeSpan newProgress, MarshaledTaskCompletionSource tcs) { StartTask(_audioSource.SetPlaybackProgressAsync, newProgress, tcs); }
/// <summary> /// Sets the volume. /// </summary> /// <param name="newVolume">The new volume.</param> /// <param name="tcs">The task completion source.</param> public void SetVolume(float newVolume, MarshaledTaskCompletionSource tcs) { StartTask(_audioSource.SetVolumeAsync, newVolume, tcs); }
/// <summary> /// Seeks to the previous track. /// </summary> /// <param name="tcs">The task completion source.</param> public void PreviousTrack(MarshaledTaskCompletionSource tcs) { StartTask(_audioSource.PreviousTrackAsync, tcs); }