这个特性从EF6开始,在之前的版本中不存在.
创新互联是一家集网站建设,兴县企业网站建设,兴县品牌网站建设,网站定制,兴县网站建设报价,网络营销,网络优化,兴县网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。EF6(.net 4.5)开始支持用async和await关键字进行异步查询和保存,不是所有的程序都能从异步中得到好处,当被挂起长时间的运行,网络或IO-bound任务,可以被用于提高客户端的响应和服务端的扩展,
什么时侯适合使用asyn
创建model
创建异步程序
让程序异步
结论
什么时侯适合使用asyn
这篇文章的目的是用一种方式介绍asyn概念,让它很容易被观察到异步和同步程序之间的区别,这个演练不关注异步编程带来好处的任何场景。
异步操作通常用于执行完成时间可能较长的任务,如打开大文件、连接远程计算机或查询数据库。异步操作在主应用程序线程以外的线程中执行。应用程序调用方法异步执行某个操作时,应用程序可在异步方法执行其任务时继续执行。
在客户端程序(WinForm, WPF等)中,在当前的线程执行时异步操作可用于保持UI的响应。在服务端程序中(ASP.NET等)异步线程可以被用于处理其它未来的请求 - 这是可以减少内存的使用量或增加服务器的吞吐量。
在多数的程序中使用异步没有明显的好处,甚至是有害的。使用测试,分析和通用场景来测量在你的特定的情况下的影响。
Create the model
创建控制台程序AsyncDemo

添加EntityFramework Nuget package

安装EntityFramework package

创建Model - AsyncDemo.cs:
using System.Collections.Generic;
using System.Data.Entity;
namespace AsyncDemo
{
public class BloggingContext : DbContext
{
public DbSet Blogs { get; set; }
public DbSet Posts { get; set; }
}
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public virtual List Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}
} 创建一个异步程序
class Program
{
static void Main(string[] args)
{
PerformDatabaseOperations();
Console.WriteLine();
Console.WriteLine("Quote of the day");
Console.WriteLine("Don't worry about the world coming to an end today... ");
Console.WriteLine("It's already tomorrow in Australia.");
Console.WriteLine();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
public static void PerformDatabaseOperations()
{
using (var db = new BloggingContext())
{
// Create a new blog and save it
db.Blogs.Add(new Blog
{
Name = "Test Blog #" + (db.Blogs.Count() + 1)
});
db.SaveChanges();
// Query for all blogs ordered by name
var blogs = (from b in db.Blogs
orderby b.Name
select b).ToList();
// Write all blogs out to Console
Console.WriteLine();
Console.WriteLine("All blogs:");
foreach (var blog in blogs)
{
Console.WriteLine(" " + blog.Name);
}
}
}
}PerformDatabaseOperations方法会保存一个新的Blog到数据库并且获取所有的Blogs然后打印在控制台中。

修改为异步
//添加Tasks引用
using System.Data.Entity;
using System.Threading.Tasks;
static void Main(string[] args)
{
var task = PerformDatabaseOperations();
Console.WriteLine("Quote of the day");
Console.WriteLine(" Don't worry about the world coming to an end today... ");
Console.WriteLine(" It's already tomorrow in Australia.");
task.Wait();
Console.WriteLine();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
public static async Task PerformDatabaseOperations()
{
using (var db = new BloggingContext())
{
// Create a new blog and save it
db.Blogs.Add(new Blog
{
Name = "Test Blog #" + (db.Blogs.Count() + 1)
});
Console.WriteLine("Calling SaveChanges.");
await db.SaveChangesAsync();
Console.WriteLine("SaveChanges completed.");
// Query for all blogs ordered by name
Console.WriteLine("Executing query.");
var blogs = await (from b in db.Blogs
orderby b.Name
select b).ToListAsync();
// Write all blogs out to Console
Console.WriteLine("Query completed with following results:");
foreach (var blog in blogs)
{
Console.WriteLine(" - " + blog.Name);
}
}
}原文:https://msdn.microsoft.com/en-us/data/jj819165.aspx
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。