【发布时间】:2015-02-03 20:52:55
【问题描述】:
我的 AsyncController 中有以下异步方法:
public async Task<Dashboard> GetFeeds()
{
var movies = new HttpClient().GetStringAsync("http://netflix/api/MyMovies");
var tweets = new HttpClient().GetStringAsync("http://twitter/api/MyTweets");
await Task.WhenAll(movies, tweets);
Dashboard dash = new Dashboard();
dash.Movies = Deserialize<Movies >(movies.Result);
dash.Tweets = Deserialize<Tweets >(tweets.Result);
return dash;
}
在这个方法中做不同的调用API,一个返回时间不同。我不能理解Task<> 是因为我必须等待两者的返回才能更新我的客户?因为我正在创建新线程。
想象我在一个PartialView中播放每个API的返回,我想会得到的结果:
-首先我会有我的电影列表(只需要 5 秒),-> 为我的用户显示
-然后是我的推文列表->为我的用户显示
但我看到的是:
-虽然 Twitter 请求没有结束,但我无法在屏幕上为我的用户播放从 Netflix 获得的数据。
最大的问题是:Task<> 仅用于更快地完成处理?
我无法根据我订购的每个 API 的周转时间播放屏幕上的信息?
这是对我的方法的调用
public async Task<ActionResult> Index()
{
var feeds = await GetFeeds();
return View(feeds);
}
我承认,我很困惑,或者,你可能没有理解Task<>的概念。
【问题讨论】:
-
您需要创建两个不同的异步操作。一种用于加载和显示 Twitter 信息(也就是运行时间较长的操作),另一种用于显示 Netflix 信息(也就是较短的操作)。
await Task.WhenAll(movies, tweets);在显示它们之前正在等待它们完成。我认为您需要对带有 async/await 的 TPL 进行更多研究。遗憾的是,我没有很好的资源。您可以在 MSDN 的第 9 频道上查找该模式。它们通常非常好。
标签: c# .net asp.net-mvc asp.net-web-api async-await