private async void ApiUpdate(ApiData apiData) { try { if (!_apiDataUpdates.ContainsKey(apiData.ApiKey)) { _apiDataUpdates.TryAdd(apiData.ApiKey, apiData); } if (!_apiUpdateBusy) { _apiUpdateBusy = true; while (_apiDataUpdates.Count > 0) { var apiUpdates = _apiDataUpdates.Values.ToList(); _apiDataUpdates.Clear(); var postData = new PostApiStatus() { SecurityToken = _sharedSettings.SecurityToken, ApiData = apiUpdates }; var start = new Stopwatch(); start.Start(); var result = await _sharedSettings.PostAsync <PostApiStatus, ReturnValue>("Remote/UpdateApi", postData, CancellationToken.None); start.Stop(); _logger.LogTrace("Send api results completed in {0}ms.", start.ElapsedMilliseconds); if (result.Success == false) { _logger.LogError(250, result.Exception, "Update api results failed. Return message was: {0}." + result.Message); } // wait a little while for more tasks results to arrive. await Task.Delay(500); } _apiUpdateBusy = false; } } catch (Exception ex) { _logger.LogError(250, ex, "Update api status failed with error. Error was: {0}." + ex.Message); _apiUpdateBusy = false; } }
public async Task <ReturnValue> UpdateApi([FromBody] PostApiStatus apiData, CancellationToken cancellationToken) { try { if (string.IsNullOrEmpty(apiData.SecurityToken)) { return(new ReturnValue(false, $"Could not update api status as no security token was provided by the remote agent.", null)); } //send any update to results to the clients foreach (var item in apiData.ApiData) { await _operations.BroadcastHubMessageAsync(item.HubKey, EClientCommand.ApiStatus, item, cancellationToken); } return(new ReturnValue(true)); } catch (Exception ex) { return(new ReturnValue(false, "Error occurred in UpdateTasks. " + ex.Message, ex)); } }