Exemple #1
0
        internal static async Task <bool> PlayAdAsync(this IVpaid vpaid, CancellationToken cancellationToken)
#endif
        {
            var errorTask          = vpaid.GetErrorTask(cancellationToken);
            var stoppedTask        = vpaid.GetStoppedTask(cancellationToken);
            var approachingEndTask = vpaid.GetApproachingEndTask(cancellationToken);
            var cancellationTask   = cancellationToken.AsTask();

#if SILVERLIGHT && !WINDOWS_PHONE || WINDOWS_PHONE7
            var completedTask = await TaskEx.WhenAny(stoppedTask, approachingEndTask, errorTask, cancellationTask);
#else
            var completedTask = await Task.WhenAny(stoppedTask, approachingEndTask, errorTask, cancellationTask);
#endif
            bool result = true;
            if (completedTask == errorTask)
            {
                throw errorTask.Result;
            }
            else if (completedTask == cancellationTask)
            {
                vpaid.StopAd();
            }
            else if (completedTask == approachingEndTask)
            {
                result = false;
            }
            cancellationToken.ThrowIfCancellationRequested();
            return(result);
        }