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); }