分享

.net异步编程

 昵称10504424 2013-10-30

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

我也是刚刚关注异步编程方面知识,也有很多不是很理解,所以想向大神请教关于.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 }
复制代码

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多