Код: Выделить всё
private static async void callMetadataAPI()
{
Stopwatch watch = new Stopwatch();
watch.Start();
string strConnection = GetConnectionString("");
string queryString = "select * from test.dbo.test_table";
using (SqlConnection connection = new SqlConnection(strConnection))
{
SqlCommand command = new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
try
{
while (reader.Read())
{
HttpResponseMessage success = await runMetadataAPI(reader);
success.EnsureSuccessStatusCode();
}
}
catch (Exception e)
{
ExceptionHandler(e);
}
finally
{
reader.Close();
connection.Close();
}
}
await Task.WhenAll();
watch.Stop();
}
private static async Task runMetadataAPI(SqlDataReader reader)
{
System.Threading.Thread.Sleep(1000);
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://test.com");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("JWT", "token");
string requestUri = "/api/metadata";
var metaDataPostData = new MetaDataPostData();
metaDataPostData.CId= reader["CId"].ToString();
metaDataPostData.SId = "somevalue";
Metadata[] metaData = new Metadata[1];
metaData[0] = new Metadata();
metaData[0].Key = "columnname";
metaData[0].Value = "columnvalue";
metaDataPostData.Metadata = metaData;
var json = JsonConvert.SerializeObject(metaDataPostData);
var data = new StringContent(json, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync(requestUri, data);
return response;
}
class MetaDataPostData
{
public Metadata[] Metadata { get; set; }
public string SId{ get; set; }
public string CId { get; set; }
}
class Metadata
{
public string Key { get; set; }
public string Value { get; set; }
}
Я предотвращаю 429 в этом коде, просто задавая задержку System.Threading.Thread.Sleep(1000 ) в функции runMetadataAPI (функция, использующая API).
Подробнее здесь: https://stackoverflow.com/questions/596 ... y-requests
Мобильная версия