[英]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.