我有一些文件要上传,一些文件失败,因为帖子是异步的而不是同步的..
我正在尝试将此调用作为同步调用..
我想等待回应.
如何将此调用设为同步?
static async Task<JObect> Upload(string key, string url, string
sourceFile, string targetFormat)
{
using (HttpClientHandler handler = new HttpClientHandler {
Credentials = new NetworkCredential(key, "")
})
using (HttpClient client = new HttpClient(handler))
{
var request = new MultipartFormDataContent();
request.Add(new StringContent(targetFormat), "target_format");
request.Add(new StreamContent(File.OpenRead(sourceFile)),
"source_file",
new FileInfo(sourceFile).Name);
using (HttpResponseMessage response = await client.PostAsync(url,
request).ConfigureAwait(false))
using (HttpContent content = response.Content)
{
string data = await content.ReadAsStringAsync().ConfigureAwait(false);
return JsonObject.Parse(data);
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助赞赏!
使用HttpClient和避免死锁的最佳方法是什么?我使用下面的代码,完全从同步方法调用,但我担心它可能导致死锁.
我已经做了类似功能的一些阅读.ConfigureAwait(false),.GetAwaiter(),.GetResult()但是我正在寻找的最佳实践方法输入.
代码不太准确,但足够接近.
public static bool TryRequest(string url, out response)
{
HttpContent content = new StringContent(json, Encoding.UTF8, "application/json");
using (HttpClient client = new HttpClient())
{
HttpResponseMessage responseMessage = null;
switch (verb)
{
case HttpVerb.Put:
responseMessage = client.PutAsync(url, content).Result;
break;
case HttpVerb.Post:
responseMessage = client.PostAsync(url, content).Result;
break;
case HttpVerb.Delete:
responseMessage = client.DeleteAsync(url).Result;
break;
case HttpVerb.Get:
responseMessage = client.GetAsync(url).Result;
break;
}
if (responseMessage.IsSuccessStatusCode)
{
responseContent = responseMessage.Content.ReadAsStringAsync().Result;
statusCode = responseMessage.StatusCode;
}
}
}
Run Code Online (Sandbox Code Playgroud)