private async Task <AssemblyData?> GetAssemblyDataAsync(AssemblyLocation location) { Task <byte[]?> dll = _contentFileReader.ReadBytesOrNullAsync(location.DllPath); Task <byte[]?> pdb = Debugger.IsAttached && location.PdbPath != null ? _contentFileReader.ReadBytesOrNullAsync(location.PdbPath) : Task.FromResult <byte[]?>(null); await Task.WhenAll(dll, pdb).ConfigureAwait(false); var dllBytes = dll.Result; var pdbBytes = pdb.Result; if (dllBytes == null) { return(null); } return(new AssemblyData(dllBytes, pdbBytes)); }
private async Task ReadAllManifests() { var manifestDataTasks = new Dictionary <string, Task <byte[]?> >(); var manifestPaths = _manifestLocator.GetManifestPaths().Except(_loadedPaths.Keys); foreach (var path in manifestPaths) { manifestDataTasks.Add(path, _fileReader.ReadBytesOrNullAsync(path)); } await Task.WhenAll(manifestDataTasks.Values.ToArray()).ConfigureAwait(false); var pathData = manifestDataTasks .Select(i => new { Path = i.Key, Data = i.Value.Result }) .ToList(); foreach (var path in pathData) { _loadedPaths.TryAdd(path.Path, path.Data); } var manifestModels = pathData .Where(i => i.Data != null) .ToDictionary(i => i.Path, i => JObject.Parse(Encoding.UTF8.GetString(i.Data !))); foreach (var keyValue in manifestModels) { foreach (var module in keyValue.Value) { if (module.Value.Type != JTokenType.Object) { continue; } _loadedModules.TryAdd(module.Key, new ModuleManifest(module.Key, (JObject)module.Value)); } } }