Example #1
0
        public async Task ExecuteTaskAsync(Func <CancellationToken, Task> action, bool notifySuccess, bool preventCancellation)
        {
            _ = action ?? throw new ArgumentNullException(nameof(action));

            await _cancellationTokenSourceProvider.ExecuteAsyncOperation(
                async cancellationToken => await Task.Run(
                    async() =>
            {
                if (preventCancellation)
                {
                    _messageHub.Publish(CancellationState.Forbidden);
                }
                _messageHub.Publish(TaskState.Started);
                try
                {
                    await action(cancellationToken).ConfigureAwait(false);
                    if (notifySuccess)
                    {
                        _messageHub.Publish("Task has been executed successfully!".ToSuccess());
                    }

                    _messageHub.Publish(TaskState.Finished);
                }
                catch (Exception ex)
                {
                    _messageHub.Publish(ex.ToMessage());
                    _messageHub.Publish(TaskState.Error);
                }
                finally
                {
                    _messageHub.Publish(CancellationState.Allowed);
                }
            },
                    cancellationToken)
                .ConfigureAwait(false))
            .ConfigureAwait(false);
        }