Igor
Igor

Reputation: 4003

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.

enter image description here

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<>.

Upvotes: 2

Views: 3097

Answers (1)

Stephen Cleary
Stephen Cleary

Reputation: 456417

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.

Upvotes: 8

Related Questions