关于如何将EF 6与MVC 5一起使用的最新EF教程似乎倾向于使用对数据库的asych调用,如:
Department department = await db.Departments.FindAsync(id);
Run Code Online (Sandbox Code Playgroud)
这是新标准/最佳做法吗?
我不确定ASP.NET MVC的这种开发风格有什么好处.
有人可以评论这种模式,这是MS推广的新标准吗?
利用异步I/O的优点,它现在很容易编码和编写(使用Await和TAP方法),我想知道,如果我们应该默认使用async,只需要在需要时使用sync来调整性能.
异步I/O释放调用线程,并允许在等待结果时执行其他操作.另一方面,异步I/O比同步慢一点.
为了实施响应式UI,WinRT设计人员认为提供仅异步方法是可以接受的.
内部的AFAIK Windows文件I/O是异步的.天真地看着这个,我不清楚为什么.NET中的异步文件I/O应该比同步慢.
我通常喜欢简单性和健壮性,只在必要时调整性能.在过去,我们默认使用同步,除了调用某些服务以及手机等平台强制执行异步.我们很少使用异步调整.
在研究了异步Web开发的概念之后,特别是从这个源开始,我创建了一个示例应用程序来证明这个概念.
该解决方案由2个ASP.NET Web API应用程序组成.第一个是模拟的慢端点; 它在返回一个名为Student的自定义类之前等待1000毫秒:
public IEnumerable<Student> Get()
{
Thread.Sleep(1000);
return new List<Student> { new Student { Name = @"Paul" }, new Student { Name = @"Steve" }, new Student { Name = @"Dave" }, new Student { Name = @"Sue" } };
}
Run Code Online (Sandbox Code Playgroud)
这是学生班:
public class Student
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
此端点托管在localhost:4002上的IIS 7中.
第二个应用程序使用2个端点联系第一个,一个是同步的,另一个是异步的:
public IEnumerable<Student> Get() {
var proxy = WebRequest.Create(@"http://localhost:4002/api/values");
var response = proxy.GetResponse();
var reader = new StreamReader(response.GetResponseStream());
return …Run Code Online (Sandbox Code Playgroud) 在.net 4.0中,我经常使用Task.ContinueWith.但后来我发现"task.GetAwaiter()"似乎有着相同的目的.
有什么不同?