大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C#技巧 > 实例讲解.net异步编程(附代码)

实例讲解.net异步编程(附代码)

关键词:编程.net  阅读(745) 赞(10)

[摘要]现在电脑大部分都是多核心,在处理多线程方便有很大优势,异步调用方法的时候可以立即返回执行其他程序,进行异步编程会让程序运行效率更高。

现在电脑大部分都是多核心,在处理多线程方便有很大优势,异步调用方法的时候可以立即返回执行其他程序,进行异步编程会让程序运行效率更高。

我也是刚刚关注异步编程方面知识,也有很多不是很理解,所以想向大神请教关于.net异步编程的一些问题。

1、异步编程原理,主程序和异步程序还有回调函数分别什么线程上,执行顺序?

2、怎么使回调函数获取异步返回值,并在回调完毕后关闭主程序?

3、能否主程序结束,异步程序还可以继续执行,执行完毕后执行回调?

4、异步编程实际应用的作用如何,真正能带来多大好处?想用异步编程,如何更好的运用?

下面是我写的代码:

 /*Author:liulei
  *Des:异步编程测试
  *Date:2013-10-29
  */
 using System;
 using System.Collections.Generic;
 using System.Data;
 using System.Data.Common;
 using System.Linq;
 using System.Text;
 using System.Threading;
 using Microsoft.Practices.EnterpriseLibrary.Data;
 
 namespace AsyncApplication
 {
     class Program
     {
 
         static void Main(string[] args)
         {
             Console.WriteLine("主程序开始!");
             Func<int> caller = new Func<int>(CreateUser);
             Console.WriteLine("异步开始!");
             IAsyncResult ar = caller.BeginInvoke(new AsyncCallback(CallBackMethod), caller);
             caller.EndInvoke(ar);
             Console.WriteLine("主程序完成!");
         }
 
         //回调方法
         static void CallBackMethod(IAsyncResult ar)
         {
             Func<int> a = (Func<int>)ar.AsyncState;
             int result = a.EndInvoke(ar);//这样是可以获取异步的返回值,可是进行到这里,回调程序就结束了,不会执行下面程序!
             Console.WriteLine("回调完成!");
         }
         //创建用户
         static int CreateUser()
         {
             Database db = CreateDatabase();
             string sql = "insert into [User] (Name,Password) values (@Name,@Password);select @@identity";
             DbCommand dc = db.GetSqlStringCommand(sql);
             db.AddInParameter(dc, "@Name", DbType.String, "zhaoliang");
             db.AddInParameter(dc, "@Password", DbType.String, "456");
             var ob = db.ExecuteScalar(dc);
             return Convert.ToInt16(ob);
             
         }
         //创建Database
         static Database CreateDatabase()
         {
             Database db = DatabaseFactory.CreateDatabase("ConnectionString");
             return db;
         }
     }
 }

大家有什么关于异步编程好的理解,可以提出来大家一起讨论学习,谢谢。



相关评论