예제 #1
0
        public Java.Lang.Object AttachCompleter(CallbackToFutureAdapter.Completer completer)
        {
            var jobName = this.InputData.GetString(ShinyJobIdentifier);

            if (jobName.IsEmpty())
            {
                completer.Set(Result.InvokeFailure());
            }
            else
            {
                ShinyHost
                .Resolve <IJobManager>()
                .Run(jobName, this.cancelSource.Token)
                .ContinueWith(x =>
                {
                    switch (x.Status)
                    {
                    case TaskStatus.Canceled:
                        completer.SetCancelled();
                        break;

                    case TaskStatus.Faulted:
                        Log.Write(x.Exception);
                        completer.SetException(new Java.Lang.Throwable(x.Exception.ToString()));
                        break;

                    case TaskStatus.RanToCompletion:
                        completer.Set(Result.InvokeSuccess());
                        break;
                    }
                });
            }
            return("AsyncOp");
        }
예제 #2
0
        public Object AttachCompleter(CallbackToFutureAdapter.Completer p0)
        {
            Log.Debug(TAG, $"Executing.");

            //Switch to background thread.
            Task.Run(async() =>
            {
                //Perform a process here, simulated by a delay for 5 seconds.

                var delaySeconds      = 5;
                var progress          = 0;
                var progressIncrement = 100 / delaySeconds;
                var dataBuilder       = new Data.Builder();

                for (int i = 0; i < delaySeconds + 1; i++)
                {
                    await Task.Delay(1000);
                    progress += progressIncrement;
                    dataBuilder.PutInt("Progress", progress);
                    SetProgressAsync(dataBuilder.Build());
                }

                Log.Debug(TAG, "Completed.");

                //Set a Success Result on the completer and return it.
                return(p0.Set(Result.InvokeSuccess()));
            });

            return(TAG);
        }
예제 #3
0
        public Java.Lang.Object AttachCompleter(CallbackToFutureAdapter.Completer p0)
        {
            Log.Debug(TAG, $"Executing.");

            //Switch to background thread.
            Xamarin.Forms.Device.StartTimer(new TimeSpan(0, 0, 5), () =>
            {
                Toast.MakeText(context, "Oh Greeter Service is Destroyed.", ToastLength.Long).Show();

                return(true);
            });
            //Task.Run(async () =>
            //{
            //    //Perform a process here, simulated by a delay for 5 seconds.
            //    Toast.MakeText(context, "Oh Greeter Service is Destroyed.", ToastLength.Long).Show();
            //    await Task.Delay(5000);

            //    Log.Debug(TAG, "Completed.");

            //    //Set a Success Result on the completer and return it.
            //    return p0.Set(Result.InvokeSuccess());
            //});

            return(TAG);
        }
예제 #4
0
 public Java.Lang.Object AttachCompleter(CallbackToFutureAdapter.Completer p0)
 {
     Task.Run(async() =>
     {
         for (int i = 0; i < 20; i++)
         {
             await Task.Delay(TimeSpan.FromSeconds(1));
             SetProgressAsync(new Data.Builder().PutInt("progress", i * 5).Build());
         }
         return(p0.Set(Result.InvokeRetry()));
     });
     return("MyListenableWorker");
 }
예제 #5
0
        Object CallbackToFutureAdapter.IResolver.AttachCompleter(CallbackToFutureAdapter.Completer p0)
        {
            try
            {
                var scheduler = TaskScheduler.FromCurrentSynchronizationContext();
                Task.Run(async() =>
                {
                    Log.Debug("Starting Worker {Name}", GetType().FullName);
                    return(await DoWorkAsync(_cts.Token));
                }, _cts.Token)
                .ContinueWith(previous =>
                {
                    if (previous.IsCompletedSuccessfully)
                    {
                        Log.Trace(previous.Exception, "Worker {Name} completed successfully", GetType().FullName);
                        p0.Set(Result.InvokeSuccess(previous.Result));
                    }
                    else
                    {
                        if (previous.IsCanceled)
                        {
                            Log.Trace(previous.Exception, "Worker {Name} was cancelled", GetType().FullName);
                            p0.SetCancelled();
                        }

                        if (previous.IsFaulted)
                        {
                            Log.Error(previous.Exception, "Worker {Name} raised an exception", GetType().FullName);
                            p0.SetException(new Error(previous.Exception?.ToString() ?? "Unknown cause"));
                        }
                    }
                }, _cts.Token, TaskContinuationOptions.None, scheduler);
            }
            catch (Exception e)
            {
                Log.Error(e, "Worker {Name} raised an exception", GetType().FullName);
            }

            return(GetCompletionTag() as Object);
        }
예제 #6
0
        public Java.Lang.Object AttachCompleter(CallbackToFutureAdapter.Completer completer)
        {
            var jobName    = this.InputData.GetString(ShinyJobIdentifier);
            var jobManager = ShinyHost.Resolve <IJobManager>();

            //if (jobManager != null && !jobName.IsEmpty())
            if (jobName.IsEmpty() || jobManager == null)
            {
                //completer.Set(Result.InvokeFailure());
                completer.Set(Result.InvokeSuccess());
            }
            else
            {
                jobManager
                .Run(jobName, this.cancelSource.Token)
                .ContinueWith(x =>
                {
                    switch (x.Status)
                    {
                    case TaskStatus.Canceled:
                        completer.SetCancelled();
                        break;

                    case TaskStatus.Faulted:
                        ShinyHost
                        .LoggerFactory
                        .CreateLogger <ILogger <IJobManager> >()
                        .LogError(x.Exception, "Error in job");

                        completer.SetException(new Java.Lang.Throwable(x.Exception.ToString()));
                        break;

                    case TaskStatus.RanToCompletion:
                        completer.Set(Result.InvokeSuccess());
                        break;
                    }
                });
            }
            return("AsyncOp");
        }