public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId) { _cts = new CancellationTokenSource(); Task.Run(async() => { try { // Option #1: Using PCL project service with Dependency Injection await MediaService.Instance.UploadPendingVideos(); } catch (Exception ex) { var errorMessage = new VideoUploadResponseMessage { HasErrors = true, Message = "ERROR: " + ex.Message }; Device.BeginInvokeOnMainThread(() => MessagingCenter.Send(errorMessage, "UploadVideoResponse")); } finally { var responseMessage = new VideoUploadResponseMessage(); if (_cts.IsCancellationRequested) { responseMessage.Message = "Video Upload Canceled!"; } else { responseMessage.Message = "Video(s) Uploaded Successfully!"; } Device.BeginInvokeOnMainThread(() => MessagingCenter.Send(responseMessage, "UploadVideoResponse")); } }, _cts.Token); return(StartCommandResult.Sticky); }
public async Task Start() { _cts = new CancellationTokenSource(); _taskId = UIApplication.SharedApplication.BeginBackgroundTask("VideoUploadTask", OnExpiration); try { // Option #1: Using PCL project service with Dependency Injection await MediaService.Instance.UploadPendingVideos(); } catch (OperationCanceledException ex) { var errorMessage = new VideoUploadResponseMessage { HasErrors = true, Message = "ERROR: " + ex.Message }; Device.BeginInvokeOnMainThread(() => MessagingCenter.Send(errorMessage, "UploadVideoResponse")); } finally { var responseMessage = new VideoUploadResponseMessage(); if (_cts.IsCancellationRequested) { responseMessage.Message = "Video Upload Canceled!"; } else { responseMessage.Message = "Video(s) Uploaded Successfully!"; } Device.BeginInvokeOnMainThread(() => MessagingCenter.Send(responseMessage, "UploadVideoResponse")); } UIApplication.SharedApplication.EndBackgroundTask(_taskId); }