private async Task ReloadPackagesAsync() { _reloadPackagesCancellationTokenSource?.Cancel(); _reloadPackagesCancellationTokenSource = new CancellationTokenSource(); var identities = _localPackagesService.RequireInstalledPackages() .Where(i => i.Id.ContainsIgnoreCase(_lastFilterString)); var tasks = identities.Select(async i => { var packageInfo = await _localPackagesService.GetInstalledPackageInfoAsync(i.Id); if (packageInfo == null) { return(new PackageRowPresentationModel(i.Id, true, i.Version.ToString(), Resources.Load <Texture2D>(Paths.DefaultIconResourceName), Enumerable.Empty <string>(), Enumerable.Empty <string>())); } return(await CreatePresentationModelAsync(packageInfo)); }); // todo break method if _reloadPackagesCancellationTokenSource.Cancelled IEnumerable <PackageRowPresentationModel> packages = await Task.WhenAll(tasks); if (!string.IsNullOrWhiteSpace(_lastSelectedAssembly)) { packages = packages.Where(p => p.InstalledInAssemblies.Contains(_lastSelectedAssembly)); } if (!string.IsNullOrWhiteSpace(_lastSelectedSource)) { packages = packages.Where(p => p.Sources.Contains(_lastSelectedSource)); } _mainWindow.InstalledPackages = packages; }