我习惯使用Scala编程语言 - 使用Scala我可以映射未来,例如:
val response: Future[HttpResponse] = asyncHttpClient.GetRequest("www.google.com")
val statusCode: Future[Int] = response.map(r => r.statusCode)
Run Code Online (Sandbox Code Playgroud)
最近我接受了使用C#的工作,我发现自己与上面的例子情况相同,但我无法弄清楚如何"映射"任务.
这是我想要实现的一个例子:
Task<HttpResponseMessage> response = httpClient.GetAsync("www.google.com")
Task<int> statusCode = response.Map(response => response.StatusCode)
Run Code Online (Sandbox Code Playgroud)
谢谢
现有方法最直接的翻译是:
Task<int> statusCode = response.ContinueWith(t => t.Result.StatusCode)
Run Code Online (Sandbox Code Playgroud)
但是在实践中,你几乎总是等待任务得到结果.也许你应该研究async/await.
老实说,我对此感到有些惊讶。(更可能是,我还没有看到它。)但是,您可以很容易地构建它:
public static async Task<TResult> Map<TSource, TResult>
(Task<TSource> task, Func<TSource, TResult> selector)
=> selector(await task);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1055 次 |
| 最近记录: |