я привык работать с языком программирования Scala - с помощью Scala я мог бы карту через фьючерсы, такие как:C# - преобразовать задачу асинхронной от одного типа к другому
val response: Future[HttpResponse] = asyncHttpClient.GetRequest("www.google.com")
val statusCode: Future[Int] = response.map(r => r.statusCode)
Недавно я взял работая с C#, и я увидел себя в той же ситуации, что и выше, но я не мог понять, как «сопоставить» задачу.
Вот пример того, что я хочу добиться:
Task<HttpResponseMessage> response = httpClient.GetAsync("www.google.com")
Task<int> statusCode = response.Map(response => response.StatusCode)
Благодаря
По сути, Джон Скит реализовал это, однако, поскольку вы действительно предоставляете мне стандартный метод библиотеки, я приму свой ответ. –
Я думаю, что ответ @Jon Skeet также менее эффективен, потому что он создает машину состояний для ожидания. Не совсем уверен, хотя, может быть, есть некоторые проблемы с ContinueWith, которых я не вижу. – Stilgar
Эта версия будет иметь несколько другую обработку исключений. Ваш будет поднимать «AggrageException», содержащее фактическое исключение, и Джон сделает реальное исключение. –