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