【发布时间】:2014-07-04 08:54:34
【问题描述】:
我正在阅读很多文章并看到了 mvc 项目的示例,但无法找到我的问题的答案,请帮助我。
问题: 我有异步 mvc5 应用程序的简单示例,但我不明白下划线会发生什么,哪个版本是正确的,为什么?十分感谢。
示例
public class HomeController : Controller
{
[HttpGet]
public async Task<JsonResult> NamesAsync()
{
var result = await new TestService().GetNamesAsync();
return Json(result,JsonRequestBehavior.AllowGet);
}
public async Task<JsonResult> Names()
{
var result = await new TestService().GetName();
return Json(result, JsonRequestBehavior.AllowGet);
}
}
public sealed class TestService
{
public async Task<List<string>> GetNamesAsync()
{
return await new DataLayer().GetNamesAsync();
}
public Task<List<string>> GetName()
{
return Task<List<string>>.Factory.StartNew(() => new DataLayer().GetNames());
}
}
public sealed class DataLayer
{
public async Task<List<string>> GetNamesAsync()
{
using (var context = new TestContext())
{
return await context.Names.Select(x => x.NameText).ToListAsync();
}
}
public List<string> GetNames()
{
var tcs = new TaskCompletionSource<List<string>>();
Task.Factory.StartNew(() =>
{
using (var context = new TestContext())
{
var names = context.Names.Select(x => x.NameText).ToList();
tcs.SetResult(names);
}
});
Task.WhenAll(tcs.Task);
return tcs.Task.Result;
}
}
【问题讨论】: