【发布时间】:2019-02-05 23:02:32
【问题描述】:
我正在尝试使用 C# 中的 HttpClient 对 URL 进行 PUT 和 POST。出于扩展目的,我需要异步执行此操作。但是,我只能让我的 PUT 和 POST 同步工作。下面是我用来将 JSON 格式的 ZoomData 对象放入 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 void的工作原理。什么叫JsonPUTququecall? -
我有一个驱动函数 SyncDriver() 加载队列并将它们传递给 JsonPUTqueueCall。是否应该将其设为异步,并在 JsonPUTqueueCall 方法上等待?
-
是的,整个链应该是
async -
谢谢,我正在尝试。
标签: c# asynchronous post httpclient put