繁体   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