Igo*_*gor 2 .net c# asp.net-mvc async-await asp.net-web-api
我的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;
}
Run Code Online (Sandbox Code Playgroud)
在这个方法中做不同的调用API,一个具有彼此不同的返回时间.我无法理解的Task<>是因为我必须等待两人的回归才能更新我的客户?因为我正在创造新的线程.

想象一下我在PartialView中播放每个API的返回,我认为结果会得到:
- 首先我会有我的电影列表(它只需要5s), - >显示给我的用户
- 然后我的推文列表 - >显示给我的用户
但我看到的是:
- 虽然Twitter请求没有结束,但我没有在屏幕上为我的用户播放我从Netflix获得的数据.
最大的问题是:A Task<>仅用于加快处理速度吗?
我根据我订购的每个API的周转时间无法在屏幕上播放信息?
这是对我的方法的调用
public async Task<ActionResult> Index()
{
var feeds = await GetFeeds();
return View(feeds);
}
Run Code Online (Sandbox Code Playgroud)
我承认,我很困惑,或者,也许你不明白这个概念Task<>.
ASP.NET MVC的工作方式是单个控制器操作处理单个HTTP请求,并生成单个HTTP响应.无论动作是同步还是异步,都是如此.
换句话说(正如我在我的博客上解释的那样),async不会改变HTTP协议.要将"初始结果"返回给客户端浏览器并使用其他数据更新页面(或页面的一部分),您需要使用专为此设计的技术:AJAX或SignalR.
有关详细信息,请参阅我在异步ASP.NET上的MSDN文章中的"异步代码不是银弹"部分.
| 归档时间: |
|
| 查看次数: |
3039 次 |
| 最近记录: |