У меня есть этот метод асинхронной:Реализация синхронного метода с вызовом <asyncmethod> .Result
public async Task<RES> PostAsync<RES>(string url, string content) where RES : new()
{
using (var client = new HttpClient())
{
HttpResponseMessage message = await client.PostAsync(url, new StringContent(content, Encoding.UTF8, "application/json"));
var readAsStringAsync = await message.Content.ReadAsStringAsync();
return await readAsStringAsync.FromJsonAsync<RES>(mySerializerSettings);
}
}
Где FromJsonAsync
реализован как метод расширения:
public async static Task<T> FromJsonAsync<T>(this string data, JsonSerializerSettings settings) where T : new()
{
return (T)(await JsonConvert.DeserializeObjectAsync<T>(data, settings));
}
Теперь я хочу, чтобы добавить регулярные синхронные Post
и я думал, что реализация будет такой:
public RES Post<RES>(string url, string content) where RES : new()
{
return PostAsync<RES>(url, content).Result;
}
Но это не действительно работа. Я вижу, что запрос отправляется через Hiffer sniffer, и я получаю ответ обратно, но я застреваю при отладке и не могу продолжить.
Кстати, это делает работу (с Result
вместо await
):
public RES Post<RES>(string url, string content) where RES : new()
{
using (var client = new HttpClient())
{
HttpResponseMessage message = client.PostAsync(url, new StringContent(content, Encoding.UTF8, "application/json")).Result;
var readAsStringAsync = message.Content.ReadAsStringAsync().Result;
return readAsStringAsync.FromJson<RES>(mySerializerSettings);
}
}
Где FromJson
реализован как метод расширения:
public static T FromJson<T>(this string data, JsonSerializerSettings settings) where T : new()
{
return (T)JsonConvert.DeserializeObject<T>(data, settings);
}
Приложение является веб-бэкенд (WebAPI).
Что я делаю неправильно?
Какой вид приложения это? – i3arnon
@ i3arnon - сервер веб-приложений (WebApi). –
Мне показалось странным, что 'JsonConvert.DeserializeObjectAsync' - это тупики. Это просто оболочка 'Factory.StartNew' над' DeserializeObject', которая устарела BTW. –