Example #1
0
        private static IDisposable RegisterCancellationAction(TaskCompletionSource <bool> tcs,
                                                              CancellationToken cancellationToken, int id)
        {
            if (cancellationToken.CanBeCanceled == false)
            {
                return(null);
            }

            return(cancellationToken.Register(() =>
            {
                Native.Stop(id).Validate("Failed to cancel");
                tcs.TrySetCanceled();
            }));
        }
Example #2
0
        private static async Task StartAsyncCore(ToneType tone, AudioStreamPolicy streamPolicy,
                                                 int durationMilliseconds, CancellationToken cancellationToken)
        {
            var tcs = new TaskCompletionSource <bool>();

            Native.Start(tone, streamPolicy.Handle, durationMilliseconds, out var id).
            Validate("Failed to play tone.");

            using (RegisterCancellationAction(tcs, cancellationToken, id))
            {
                await WaitForDuration(tcs, cancellationToken, durationMilliseconds);

                await tcs.Task;
            }
        }