Мне нравится новый класс System.Net.Http.HttpClient. У этого есть хороший простой API, он не бросает на обычные ошибки. Но его асинхронно.
Мне нужен код, который идет (глубоко внутри сервера)
foo();
bar();
// compute stuff
var x = GetThingFromOtherServerViaHttp();
// compute more stuff
wiz(x);
классический последовательный синхронный код. Я видел несколько вопросов SO, которые были похожи, но на самом деле не заканчивали тем, что говорили "сделай это". Я посмотрел на
client.PostAsync.Wait()
Мировые крики "не делают этого". Как насчет:
client.PostAsync.Result()
Разве это не просто переодеться?
В конце концов я закончил тем, что передал обратный вызов лямбда, который обработал результат, а затем пробудил вызывающий поток, который явно ожидал события EventWaitHandle. Много сантехники. Есть ли что-то немного проще или shoul, я просто возвращаюсь к использованию старых http-клиентов.
EDIT: после дальнейшего чтения я подозреваю, что этот код имеет те же проблемы, что и Wait и Result, его просто более длинный тупик
EDIT: Недавно я получил сообщение MS PM о том, что существует мандат "любой API, который может принимать > X ms (я забыл X) должен быть асинхронным", многие PM интерпретируют это как "только async" (неясно, если это то, что предназначено). Следовательно, DB DB документа является только асинхронным.