C# EF的異步

注:此demo程序是從microsoft的ef文章中拿過來的,僅用於記錄,以後自己使用時方便查詢,相關網址如下:

https://docs.microsoft.com/zh-cn/ef/ef6/get-started

此文記錄c# ef框架下的異步操作寫法,實際上,根據代碼來看,應該和是否ef無關,由於不太熟悉ef和c#之間的關係,所以就按照下載文檔時的文章標題來描述此段文字了。

這裏簡單記錄兩個demo程序,一個是同步的,一個是異步的,做個簡單的對比就知道之間的差別了。

同步demo如下:

using System;
using System.Linq;
namespace AsyncDemo
{
	class Program
	{
		static void Main(string[] args)
		{
			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.");
			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)
				});
				Console.WriteLine("Calling SaveChanges.");
				db.SaveChanges();
				Console.WriteLine("SaveChanges completed.");
				// Query for all blogs ordered by name
				Console.WriteLine("Executing query.");
				var blogs = (from b in db.Blogs	orderby b.Name select b).ToList();
				// Write all blogs out to Console
				Console.WriteLine("Query completed with following results:");
				foreach (var blog in blogs)
				{
					Console.WriteLine(" " + blog.Name);
				}
			}
		}
	}
}

異步demo如下:

using System;
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
namespace AsyncDemo
{
	class Program
	{
		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);
				}
			}
		}
	}
}

兩個程序的差別不大,主要是把函數定義成“任務”,需要異步的部分,就調用異步接口。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章