我只是Async从书本上学习编程,呵呵!他们的例子不起作用。作者(WebAPI2 书中的 Adam Freeman,第 3 章,第 47 页!)想要解释一种技术,当我们有一系列同步语句并且我们想要执行它们时Async。他说这是通过创建一个启动任务来完成的,该任务包装我们需要执行的语句并返回任务作为方法的结果。然后他说看这个例子。好惊喜!它甚至不起作用,因为它无法从 转换long为Task<long>我该如何修复这段代码?public interface ICustomController{ Task<long> GetPageSize(CancellationToken cancellationToken);}public Task<long> GetPageSize(CancellationToken cancellationToken){ WebClient wb = new WebClient(); Stopwatch sw = Stopwatch.StartNew(); List<long> results = new List<long>(); for(int i=0; i<10; i++) { if (!cancellationToken.IsCancellationRequested) { Debug.WriteLine("Making Request {0} ", i); results.Add(wb.DownloadData(TargetUrl).LongLength); } else { Debug.WriteLine("Cancelled..."); return 0; } } Debug.WriteLine("Elapsed ms: {0} ", sw.ElapsedMilliseconds); return (long)results.Average();}请注意,他故意从方法中删除了aysncand ,以便他可以解释这种技术......但他忘记了实际修复他的代码。await
2 回答
守着星空守着你
TA贡献1799条经验 获得超8个赞
我假设他想用来Task.Run()将工作加载到线程池线程。你可以像这样使用它
public Task<long> GetPageSize(CancellationToken cancellationToken))
{
return Task.Run(() =>
{
// body of the original methode
});
}
调用者可以等待返回的Task对象。
- 2 回答
- 0 关注
- 110 浏览
添加回答
举报
0/150
提交
取消