简体   繁体   中英

About ASP.NET Web API - Async and Await

I have the following Asynchronous method inside my 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; 
}

In this method do different call APIs, one with different return time from each other. What I can not understand about Task<> is because I have to wait for the return of the two to update my client? Being that I'm creating new threads.

在此输入图像描述

Imagining that I play the return of each API in a PartialView, the result I thought would get:

-First I would have my Movies list (it only takes 5s), -> Show for my user

-And Then would my list of Tweets -> Show for my user

But what I see is:

-While The Twitter request does not end I did not get to play the data I got from Netflix on-screen for my user.

The big question is: A Task<> serves only for the processing to be done faster?

I can not play the information on the screen according to the turnaround time of each API that I ordered?

This is the call to my method

public async Task<ActionResult> Index()
{
    var feeds = await GetFeeds();

    return View(feeds);
}

I confess, I'm very confused, or, maybe you did not understand the concept of Task<> .

The way ASP.NET MVC works is that a single controller action handles a single HTTP request, and produces a single HTTP response. This is true whether the action is synchronous or asynchronous.

In other words (as I explain on my blog), async doesn't change the HTTP protocol . To return an "initial result" to the client browser and update the page (or part of the page) with other data, you'll need to use a technology designed for that: AJAX, or SignalR.

For more information, see the "Asynchronous Code Is Not a Silver Bullet" section of my MSDN article on async ASP.NET .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM