public static async System.Threading.Tasks.Task RunGetAllDataAsync(Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptObjectModel dts, List <ExtractEndpoint> extractRequests) { var pendingRequests = new List <System.Threading.Tasks.Task>(); bool fireAgain = true; try { for (var i = 0; i < _batch && extractRequests.Count > 0; i++) { SendRequest(pendingRequests, extractRequests, dts); } while (pendingRequests.Count > 0) { System.Threading.Tasks.Task finishedTask = await System.Threading.Tasks.Task.WhenAny(pendingRequests); pendingRequests.Remove(finishedTask); dts.Events.FireInformation(0, "Consume WebAPI", $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fffff")} Task {finishedTask.Id.ToString()} is {finishedTask.Status}", string.Empty, 0, ref fireAgain); if (extractRequests.Count > 0) { SendRequest(pendingRequests, extractRequests, dts); } } } catch (Exception ex) { dts.Events.FireError(0, "Consume WebAPI", $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fffff")} {ex.Message.ToString()}", string.Empty, 0); dts.TaskResult = (int)ScriptResults.Failure; } }
public static async System.Threading.Tasks.Task <HttpStatusCode> GetDataAsync(string name, string endpoint, Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptObjectModel dts) { bool fireAgain = true; var response = await _client.GetAsync(endpoint); string result = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode) { dts.Events.FireInformation(0, "Consume WebAPI", $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fffff")} Request {name} on {endpoint} has status: {(int)response.StatusCode} - {response.ReasonPhrase}", string.Empty, 0, ref fireAgain); var fileName = Path.Combine(_outboundFolder, name + "_" + DateTime.Now.ToString("yyyyMMdd_HHmmssfffff") + ".json"); File.AppendAllText(fileName, result); } else { dts.Events.FireWarning(0, "Consume WebAPI", $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fffff")} Request {name} on {endpoint} has status: {(int)response.StatusCode} - {response.ReasonPhrase} \n{result}", string.Empty, 0); } return(response.StatusCode); }
public static void SendRequest(List <System.Threading.Tasks.Task> getDataTasks, List <ExtractEndpoint> endpointList, Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptObjectModel dts) { bool fireAgain = true; var responseTask = GetDataAsync(endpointList[0].Name, endpointList[0].Endpoint, dts); getDataTasks.Add(responseTask); dts.Events.FireInformation(0, "Consume WebAPI", $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fffff")} Task {responseTask.Id.ToString()} for request {endpointList[0].Name} is {responseTask.Status}", string.Empty, 0, ref fireAgain); endpointList.RemoveAt(0); }