private async void OnElapsed(object state) { try { var context = (SynchronizationContext)state; Dictionary <string, Task <Stock> > symbolPriceTaskMapping = new Dictionary <string, Task <Stock> >(); foreach (var stock in WatchList) { // symbolPriceTaskMapping[stock.Symbol] = stockService.GetLivePriceAsync(stock.Symbol); } await Task.WhenAll(symbolPriceTaskMapping.Select(x => x.Value)); SynchronizationContext.SetSynchronizationContext(context); WatchList = new BindingList <LiveStockData>( WatchList.Select( x => { if (symbolPriceTaskMapping.ContainsKey(x.Symbol)) { x.Price = new Random().NextDouble(); // x.Price = symbolPriceTaskMapping[x.Symbol].Result.Price; x.IsPositiveChange = x.Price > x.PreviousClose; x.PercentageChange = Math.Round(((x.Price - x.PreviousClose) * 100 / x.PreviousClose), 2).ToString() + "%"; } return(x); }) .ToList()); } catch (Exception ex) { Debug.WriteLine(ex); } }