簡體   English   中英

ASP 4異步任務如何將NET 4.5轉換為NET4

[英]Asp 4 Async Task how to Convert NET 4.5 to NET4

我正在嘗試在NET4.0中轉換以下代碼
我該怎么做 ? 請給我軟件幫助
我只有VS 2010,無法更改NET版本(堅持使用4.0版本)
我試圖將第二種方法轉換為波紋管,但在

   Task<IEnumerable<IEnumerable<Video>>> GetVideosAsync()
        {
            var allVideosTasks = new List<Task<IEnumerable<Video>>>();
            foreach (var url in sources)
            {
                allVideosTasks.Add(DownloadDataAsync(url));
            }
            var context = TaskScheduler.FromCurrentSynchronizationContext();


            var allVideos = Task.Factory.ContinueWhenAll(
                allVideosTasks.ToArray(), result =>
         {
             int element = result.Count();
             Console.WriteLine("Task={0}, Thread={1} (ContinueWhenAny): number element = {2}", Task.CurrentId, Thread.CurrentThread.ManagedThreadId, element);
             var resu = result[0].Result;
         }, CancellationToken.None, TaskContinuationOptions.None, context);

            return (Task<IEnumerable<IEnumerable<Video>>>)allVideos;
        }


/*********     CODE NET4.5 ***********/
   public Task<ActionResult> Async()
    {
     var sw = Stopwatch.StartNew();
     var data = GetVideosAsync();
     sw.Stop();
     ViewBag.Elapsed = sw.ElapsedMilliseconds;
     return View("~/views/home/index.cshtml", data);
    }
    async Task<IEnumerable<IEnumerable<Video>>> GetVideoAsync()
    {
     var allVideos = new List<IEnumerable<Video>>();
     foreach (var url in sources) 
     {
      allVideos.Add(await DownloadAsync(url)); // downloading content from internet 
     }
    }

無需完全重新編寫代碼,您可以通過nuget安裝Microsoft.Bcl.Async軟件包。 http://www.nuget.org/packages/Microsoft.Bcl.Async

該軟件包使Visual Studio 2012項目可以使用新的“ async”和“ await”關鍵字。 該軟件包還包括基於任務的擴展方法,這些方法允許將一些現有的異步API與新的語言關鍵字一起使用。

支持平台:

  • .NET Framework 4(帶有KB2468871)

嘗試下面的.NET 4.5版本代碼。 在您的Async方法中,您需要await GetVideosAsync的結果,以獲取完整的視頻列表,因此該方法也需要標記為async

  public async Task<ActionResult> Async()
   {
      var sw = Stopwatch.StartNew();
      var data = await GetVideosAsync();
      sw.Stop();
      ViewBag.Elapsed = sw.ElapsedMilliseconds;
     return View("~/views/home/index.cshtml", data);     
   }

    async Task<IEnumerable<IEnumerable<Video>>> GetVideosAsync()
    {
        var allVideosTasks = new List<Task<IEnumerable<Video>>>();
        foreach (var url in sources)
        {
           allVideosTasks.Add(DownloadDataAsync(url));
        }

        await Task.WhenAll(allVideosTasks.ToArray());       

        return allVideosTasks.Select(x => x.Result);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM