private Task InstallPackageKeys(PahkatClient pahkat, IEnumerable <PackageKey> packageKeys)
        {
            var source = new TaskCompletionSource <int>();

            var actions = packageKeys
                          .Map(x => new PackageAction(x, InstallAction.Install, InstallTarget.System))
                          .ToArray();

            Task.Run(async() => {
                try {
                    Log.Debug("Starting install process");
                    pahkatToken = await pahkat.ProcessTransaction(actions, (message) => {
                        if (cancellationToken.IsCancellationRequested)
                        {
                            source.SetCanceled();
                        }

                        var app      = (App)Application.Current;
                        var newState = app.CurrentTransaction.Value.Reduce(message);
                        app.CurrentTransaction.OnNext(newState);
                        Log.Debug($"{message}");
                        if (message.IsErrorState)
                        {
                            Log.Debug("Ending install process with error");
                            source.SetException(new Exception(message.AsTransactionError?.Error ??
                                                              $"An unknown error occurred while installing package with key: {message.AsTransactionError?.PackageKey ?? "<no key>"}"));
                        }

                        if (message.IsCompletionState)
                        {
                            Log.Debug("Ending install process");
                            source.SetResult(0);
                        }
                    });
                }
                catch (TaskCanceledException) {
                    source.SetCanceled();
                }
            });

            return(source.Task);
        }