static async Task Main() { var loader = new LoadExchangeProviders("plugins"); var exchange = loader.LoadExchange().ToArray(); Console.WriteLine($"plugin number: {exchange.Length}"); var l = new List <Task <ExchangeRates[]> >(); for (int i = 0; i < exchange.Length; i++) { l.Add(Rates(exchange[i])); } var all = new List <ExchangeRates>(); while (l.Count > 0) { var x = l.ToArray(); var data = await Task.WhenAny(x); ShowValues(await data); all.AddRange(await data); l.Remove(data); } // in case of dotnet try, comment this line DisplayGui(all.ToArray()); }
public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log, ExecutionContext context) { log.LogInformation("C# HTTP trigger function processed a request."); try { await Task.Delay(100); log.LogInformation($"### OK trigger function executed at: {DateTime.Now} "); var folder = Path.Combine(context.FunctionDirectory, "plugins"); log.LogInformation($"### Folder {folder} Folder exists: {Directory.Exists(folder)}"); folder = Path.Combine(context.FunctionAppDirectory, "plugins"); log.LogInformation($"### Folder {folder} Folder exists: {Directory.Exists(folder)}"); var loader = new LoadExchangeProviders(folder); var exchange = loader.LoadExchange().ToArray(); log.LogInformation($"### plugin number: {exchange.Length}"); return(new OkObjectResult($"Hello")); } catch (Exception ex) { log.LogError("ERROR! " + ex.Message); log.LogError("!!!" + ex.StackTrace); throw; } //string name = req.Query["name"]; //string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); //dynamic data = JsonConvert.DeserializeObject(requestBody); //name = name ?? data?.name; //return name != null // ? (ActionResult)new OkObjectResult($"Hello, {name}") // : new BadRequestObjectResult("Please pass a name on the query string or in the request body"); }
public async Task <ResultsLoadBankData[]> LoadAndSave() { var items = providers.Banks().Select(it => new KeyValuePair <string, ResultsLoadBankData>(it, new ResultsLoadBankData() { Bank = it, ErrorMessage = "error loading", HasSuccess = false, NrRecordsSaved = 0, NrRecordsLoaded = -1 }) );; var lst = new Dictionary <string, ResultsLoadBankData>(items); var rates = providers.LoadExchange() .Select(it => it.GetActualRates()) .ToArray(); //TODO: how to load async all async enumerables? //TODO: how to report error if one fails? var allRates = new List <ExchangeRates>(); foreach (var rateAsync in rates) { try { var ratesBank = await rateAsync; allRates.AddRange(ratesBank); } catch (Exception) { } } var groups = allRates.GroupBy(it => it.Bank).ToDictionary(it => it.Key, it => it.ToArray()); foreach (var bank in groups.Keys) { var item = lst[bank]; item.HasSuccess = true; item.ErrorMessage = null; item.NrRecordsLoaded = groups[bank].Length; item.NrRecordsSaved = 0; foreach (var rate in groups[bank]) { try { if (await ret.Exists(rate)) { continue; } var nr = await save.Save(rate); item.NrRecordsSaved++; } catch (Exception ex) { //TODO:log item.ErrorMessage = ex.Message; item.HasSuccess = false; } } } return(lst.Values.ToArray()); }