想向大神请教关于.net异步编程的问题。
1、异步编程原理,主程序和异步程序还有回调函数分别什么线程上,执行顺序?
2、怎么使回调函数获取异步返回值,并在回调完毕后关闭主程序?
3、能否主程序结束,异步程序还可以继续执行,执行完毕后执行回调?
4、异步编程实际应用的作用如何,真正能带来多大好处?想用异步编程,如何更好的运用?
下面是我写的代码:
1 /*Author:liulei 2 *Des:异步编程测试 3 *Date:2013-10-29 4 */ 5 using System; 6 using System.Collections.Generic; 7 using System.Data; 8 using System.Data.Common; 9 using System.Linq; 10 using System.Text; 11 using System.Threading; 12 using Microsoft.Practices.EnterpriseLibrary.Data; 13 14 namespace AsyncApplication 15 { 16 class Program 17 { 18 19 static void Main(string[] args) 20 { 21 Console.WriteLine("主程序开始!"); 22 Func<int> caller = new Func<int>(CreateUser); 23 Console.WriteLine("异步开始!"); 24 IAsyncResult ar = caller.BeginInvoke(new AsyncCallback(CallBackMethod), caller); 25 caller.EndInvoke(ar); 26 Console.WriteLine("主程序完成!"); 27 } 28 29 //回调方法 30 static void CallBackMethod(IAsyncResult ar) 31 { 32 Func<int> a = (Func<int>)ar.AsyncState; 33 int result = a.EndInvoke(ar);//这样是可以获取异步的返回值,可是进行到这里,回调程序就结束了,不会执行下面程序! 34 Console.WriteLine("回调完成!"); 35 } 36 //创建用户 37 static int CreateUser() 38 { 39 Database db = CreateDatabase(); 40 string sql = "insert into [User] (Name,Password) values (@Name,@Password);select @@identity"; 41 DbCommand dc = db.GetSqlStringCommand(sql); 42 db.AddInParameter(dc, "@Name", DbType.String, "zhaoliang"); 43 db.AddInParameter(dc, "@Password", DbType.String, "456"); 44 var ob = db.ExecuteScalar(dc); 45 return Convert.ToInt16(ob); 46 47 } 48 //创建Database 49 static Database CreateDatabase() 50 { 51 Database db = DatabaseFactory.CreateDatabase("ConnectionString"); 52 return db; 53 } 54 } 55 }
大家有什么关于异步编程好的理解,可以提出来大家一起讨论学习,谢谢。