public SubstitutionsMonitor(IEnumerable <ISubstitutionProvider> providers, ISubstitutionProvider initialSubstitutionProvider = null) { Substitutions initialSubstitutions = null; if (initialSubstitutionProvider != null) { var task = initialSubstitutionProvider.GetSubstitutionsAsync(); task.Wait(); initialSubstitutions = task.Result; } foreach (var provider in providers) { provider.OnSubstitutionsUpdated += async(Substitutions substitutions) => { await Task.WhenAll(providers .Where(p => p != provider) .Select(p => p.UpdateSubstitutionsAsync(substitutions))); }; if (initialSubstitutions != null && !initialSubstitutionProvider.Equals(provider)) { provider.UpdateSubstitutionsAsync(initialSubstitutions).Wait(); } } }
public override async Task <double> Evaluate(ISubstitutionProvider substitutionProvider) { var result = Variables.Select(x => x.Value).Sum(); Parallel.ForEach(Children, async(x) => { var evaluation = await x.Evaluate(substitutionProvider); result += evaluation; }); return(result); }
public override async Task <double> Evaluate(ISubstitutionProvider substitutionProvider) { var result = Variables.Aggregate((x, y) => x - y); Parallel.ForEach(Children, async(x) => { var evaluation = await x.Evaluate(substitutionProvider); result -= evaluation; }); return(result); }
public App(string configFile) { var configText = File.ReadAllText(configFile); var config = JsonSerializer.Deserialize <Config>(configText, new JsonSerializerOptions { PropertyNameCaseInsensitive = false, PropertyNamingPolicy = JsonNamingPolicy.CamelCase }); ISubstitutionProvider main = null; var providers = config.Providers .Select((providerConfig) => { ISubstitutionProvider provider = null; if (providerConfig.Type == "json") { provider = new FileSubstitutionsProvider(providerConfig.Path, new JsonFileLoader()); } if (providerConfig.Type == "mac") { provider = new FileSubstitutionsProvider(providerConfig.Path, new MacFileLoader()); } if (providerConfig.IsPrimarySource) { main = provider; } if (provider == null) { Console.Error.WriteLine($"Provider {providerConfig.Type} unknown, skipping"); } return(provider); }) .Where(provider => provider != null) .ToList(); Console.WriteLine($"{providers.Count()} providers"); var monitor = new SubstitutionsMonitor(providers, main); }
public async Task <double> Evaluate(ISubstitutionProvider substitutionProvider) => System.Math.Pow(await Operation.Evaluate(substitutionProvider), Power);
public abstract Task <double> Evaluate(ISubstitutionProvider substitutionProvider);