我以前使用Scala编程语言 - 使用Scala我可以映射未来,例如:
val response: Future[HttpResponse] = asyncHttpClient.GetRequest("www.google.com")
val statusCode: Future[Int] = response.map(r => r.statusCode)
最近我接受了使用C#的工作,我发现自己与上面的例子情况相同,但我无法弄清楚" map"一项任务。
这是我想要实现的一个例子:
Task<HttpResponseMessage> response = httpClient.GetAsync("www.google.com")
Task<int> statusCode = response.Map(response => response.StatusCode)
由于
答案 0 :(得分:7)
现有方法的最直接翻译是:
Task<int> statusCode = response.ContinueWith(t => t.Result.StatusCode)
然而在实践中,你几乎总是等待任务得到结果。也许你应该研究async / await。
答案 1 :(得分:4)
public static async Task<TResult> Map<TSource, TResult>
(Task<TSource> task, Func<TSource, TResult> selector)
=> selector(await task);
答案 2 :(得分:0)
对于现代C#,应使用await
重写:
var response = await httpClient.GetAsync("www.google.com")
var statusCode = response.StatusCode;
这可以与async
一起使用来创建Task<int>
的东西:
async Task<int> Fetch(string url)
{
var response = await httpClient.GetAsync(url);
return response.StatusCode;
}