Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
ASP.NET MVC 2: costruire un controller asincrono (5/9)
Scritto da Fabio Carucci il 09-12-2010 ore 09:43
Intel Cluster Studio XE
Nella parte finale del codice del controller asincrono si vede perfettamente il meccanismo dell'AsyncManager.OutstandingOperations, inizialmente impostato a un incremento di tre. Progressivamente, a ogni operazione viene decrementato fino ad arrivare a zero avviando l'esecuzione del rispettivo metodo xxxxCompleted.
  1. ....
  2. public void IndexAsync(string blog)
  3.         {
  4.             ViewData["Post"] = "Post da vari blog - modalità parallela asincrona";  
  5.             AsyncManager.OutstandingOperations.Increment(3);
  6.  
  7.             PostsBlogService postBlogService = new PostsBlogService();
  8.             postBlogService.GetTitlesCompleted += (sender, e) =>
  9.             {
  10.                 AsyncManager.Parameters["titles"] = e.Value; 
  11.                 AsyncManager.OutstandingOperations.Decrement();
  12.             };
  13.             postBlogService.GetTitlesAsync();
  14.  
  15.             MicrosoftMSDNNews msdnNewsService = new MicrosoftMSDNNews();
  16.             msdnNewsService.GetNewsCompleted += (sender, e) =>      
  17.             {
  18.                 AsyncManager.Parameters["Mnews"] = e.Value;
  19.                 AsyncManager.OutstandingOperations.Decrement(); 
  20.             };
  21.             msdnNewsService.GetNewsAsync();
  22.  
  23.             MicrosoftTechnetNews technetNewsService = new MicrosoftTechnetNews();
  24.             technetNewsService.GetNewsCompleted += (sender, e) =>
  25.             {
  26.                 AsyncManager.Parameters["Tnews"] = e.Value;
  27.                 AsyncManager.OutstandingOperations.Decrement();
  28.             };
  29.             technetNewsService.GetNewsAsync();
  30.         }
  31.  
  32.         public ActionResult IndexCompleted(string[] titles, string[] mNews, string[] tNews)
  33.         {
  34.             return View("Common", new SiteViewModel
  35.             {
  36.                 PostsBlog = titles,
  37.                 MicrosoftMSDNNews = mNews,
  38.                 MicrosoftTechnetNews = tNews
  39.             });
  40.         }                  
  41.     }
  42. }
E questo è quasi tutto ciò che occorre fare per implementare un controller asincrono, ora vediamo come utilizzare il tutto nelle view. A seguire il breve codice della master page e del PostBlog:
MASTER PAGE
  1. <%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head runat="server">
  6.     <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
  7.   <link href=<%=Url.Content("~/Content/Site.css")%> rel="stylesheet" type="text/css" />
  8. </head>
  9.  
  10. <body>
  11.     <div class="page">
  12.  
  13.         <div id="header">
  14.             <div id="title">
  15.                 <h1>Async Controller</h1>
  16.             </div>
  17.  
  18.             <div id="menucontainer">
  19.  
  20.                 <ul id="menu">              
  21.                     <li><%= Html.ActionLink("Home", "Index", "Home")%></li>
  22.                 </ul>
  23.  
  24.             </div>
  25.         </div>
  26.  
  27.         <div id="main">
  28.             <asp:ContentPlaceHolder ID="MainContent" runat="server" />
  29.  
  30.             <div id="footer">
  31.             </div>
  32.         </div>
  33.     </div>
  34. </body>
  35. </html>
PostBlog
  1. <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
  2.  Inherits="System.Web.Mvc.ViewPage<MVC2Sample.Asynchronous.Models.ViewStringModel>" %>
  3.  
  4. <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
  5. 	News
  6. </asp:Content>
  7.  
  8. <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
  9.  
  10.      <h2><%= Html.Encode(ViewData["title"]) %></h2>      
  11.     <p><b>Ultimi Post</b></p>
  12.     <ul>
  13.         <% foreach (string title in Model.PostsBlog) { %>
  14.          <li><a href="<%= Url.Content("http://www.bing.com/news/search?q=" + Html.Encode(title)) %>">
  15.             <%= Html.Encode(title)%></a></li>
  16.         <% } %>
  17.     </ul>
  18.  
  19. </asp:Content>
Precedente: Google Earth Engine, i dati satellitari a disposizione degli scienziati
Successiva: I protocolli MOST e LIN per le reti veicolistiche
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.297 secondi.