发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
现在电脑大部分都是多核心,在处理多线程方便有很大优势,异步调用方法的时候可以立即返回执行其他程序,进行异步编程会让程序运行效率更高。
我也是刚刚关注异步编程方面知识,也有很多不是很理解,所以想向大神请教关于.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 }
大家有什么关于异步编程好的理解,可以提出来大家一起讨论学习,谢谢。
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
博客园 - Terrylee‘s Tech Space - Enterprise Library2.0(1):Data Access Application Block学习
使用示例如下:Database db = DatabaseFactory.CreateDatabase();string sqlCommand = "GetProductDetails";DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);db.AddInParameter(...
使用SQLite数据库和Access数据库的一些经验总结
在我的《Winform开发框架》中,可使用多种数据库作为程序的数据源,除了常规的Oracle数据库、SqlServer、MySql数据库,其中还包括了SQLi...
SQLite:没有这样的表错误Android P问题
SQLite:没有这样的表错误Android P问题。} @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } @Over...
Enterprise Library 4.1学习笔记2----数据访问程序块 - 菩提树下的杨过.Net - 博客园
<connectionStrings> <add name="Conn"connectionString="Data Source=.;Initial Catalog=Six;Persist SecurityInfo=True;User ID=sa;Password=***"providerName="S...
window系统下,如何使用sqlcipher工具对已加密数据库解密
window系统下,如何使用sqlcipher工具对已加密数据库解密需求背景。目前我项目里数据库是使用sqlcipher加密的,本文介绍如何使用sqlcipher工具进行解密,已给测试人员以及其他开发人员使用。ATTACH DAT...
The Practice of Web Application Penetration Testing
C:\xampp\htdocs\dvwa,Thenmodifyitsconfigurationfile,whichisC:\xampp\htdocs\dvwa\config\config.inc.php:$_DVWA[''''db_database'''']=''''dvwa&...
[开源代码学习]04
[开源代码学习]04[开源代码学习]-osCommerce-通用功能-数据库操作-database.php2009年10月13日 星期二 20:44.3.1打开到数据库的连接function tep_db_connect($server = DB_SERVER, $username = DB_SERV...
d3b4285c4e084c58b786776db4dc86a1 (500×719)
d3b4285c4e084c58b786776db4dc86a1 (500*719)
An easy JDBC wrapper(Database.java)
private String uri, username, password;public Database( String uri, String username, String password ) { this.uri = uri;this.username = username;public Table getTable( String name ) { ...
微信扫码,在手机上查看选中内容