Я пытаюсь PUT и POST к URL-адресу, используя HttpClient в C #. Мне нужно сделать это асинхронно для масштабирования. Тем не менее, я могу только заставить мои PUT и POST работать синхронно. Ниже приведен код, который я использую для переноса объектов ZoomData в формате JSON на URL:
// takes the dataset to PUT and PUTs to server
public async Task<HttpResponseMessage> JsonPUTcall(ZoomData toPut)
{
string jsonString = JsonConvert.SerializeObject(toPut);
return await client.PutAsync(InsiteDatasetPutURL.Replace("sys_id", toPut.sys_id), new StringContent(jsonString, UnicodeEncoding.UTF8, "application/json"));
}
А вот код, который я использую для фактической передачи объектов ZoomData в очередь в JsonPUTcall:
public async void JsonPUTqueueCall(Queue<ZoomData> toPut)
{
if (toPut.Count == 0)
return;
foreach (var zoomData in toPut)
{
var result = await this.JsonPUTcall(zoomData);
}
}
Однако, когда я пытаюсь это сделать, он просто зависает. Итак, в качестве теста я заменил «var result = await this.JsonPUTcall (zoomData);» со следующим:
public async void JsonPUTqueueCall(Queue<ZoomData> toPut)
{
if (toPut.Count == 0)
return;
foreach (var zoomData in toPut)
{
var result = this.JsonPUTcall(zoomData);
result.Wait();
}
}
Это работает, но, поскольку оно является синхронным, оно побеждает цель использования async. Чего мне не хватает?