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

我也是刚刚关注异步编程方面知识,也有很多不是很理解,所以想向大神请教关于.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, "");
var ob = db.ExecuteScalar(dc);
return Convert.ToInt16(ob); }
//创建Database
static Database CreateDatabase()
{
Database db = DatabaseFactory.CreateDatabase("ConnectionString");
return db;
}
}
}

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

.net异步编程的更多相关文章

  1. C#异步编程(一)

    异步编程简介 前言 本人学习.Net两年有余,是第一次写博客,虽然写的很认真,当毕竟是第一次,肯定会有很多不足之处, 希望大家照顾照顾新人,有错误之处可以指出来,我会虚心接受的. 何谓异步 与同步相对 ...

  2. C#与C++的发展历程第三 - C#5.0异步编程巅峰

    系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 3. C#与C++的发展历程第三 - C#5.0异步编程的巅峰 C#5.0 ...

  3. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  4. 异步编程 In .NET

    概述 在之前写的一篇关于async和await的前世今生的文章之后,大家似乎在async和await提高网站处理能力方面还有一些疑问,博客园本身也做了不少的尝试.今天我们再来回答一下这个问题,同时我们 ...

  5. C#异步编程(二)

    async和await结构 序 前篇博客异步编程系列(一) 已经介绍了何谓异步编程,这篇主要介绍怎么实现异步编程,主要通过C#5.0引入的async/await来实现. BeginInvoke和End ...

  6. [.NET] 利用 async & await 的异步编程

    利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html  目录 异步编程的简介 异 ...

  7. [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程

    怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html  ...

  8. [C#] 走进异步编程的世界 - 开始接触 async/await

    走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $&qu ...

  9. C#异步编程

    什么是异步编程 什么是异步编程呢?举个简单的例子: using System.Net.Http; using System.Threading.Tasks; using static System.C ...

  10. 深入解析js异步编程利器Generator

    我们在编写Nodejs程序时,经常会用到回调函数,在一个操作执行完成之后对返回的数据进行处理,我简单的理解它为异步编程. 如果操作很多,那么回调的嵌套就会必不可少,那么如果操作非常多,那么回调的嵌套就 ...

随机推荐

  1. SQL Server调优系列进阶篇(深入剖析统计信息)

    前言 经过前几篇的分析,其实大体已经初窥到SQL Server统计信息的重要性了,所以本篇就要祭出这个神器了. 该篇内容会很长,坐好板凳,瓜子零食之类... 不废话,进正题 技术准备 数据库版本为SQ ...

  2. SQL Server 2008 R2——ROW_NUMBER() 去掉不同行中相同列的重复内容

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  3. MySQL入门(一)

    最近一直都在搞新员工的培训材料,MySQL的培训PPT我居然写了100多页,我都佩服我自己的毅力了.不如现在把这些总结一下,慢慢写到博客里,供入门者参考. 一 关系型数据库 关系型数据库的理论提出于上 ...

  4. HBase应用开发回顾与总结系列之一:概述HBase设计规范

      概述 笔者本人接触研究HBase也有半年之久了,虽说不上深入和系统,但至少算是比较沉迷.作为部门里大数据技术的探路者,笔者还要承担起技术传播的职责,所以在摸索研究的过程中总是不断地进行总结和测试, ...

  5. 使用bakefile编译C工程代码

    前言 最近有个想法,想把ineedle整体架构从头自己编写代码来实现一下,来加深对iNeedle系统的理解,同时加强Linux + C相关知识.由于iNeedle系统的庞大,只能是先把框架搭起来,根据 ...

  6. Java enum的用法详解

    (转自:http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html) 用法一:常量 在JDK1.5 之前,我们定义常量都是: ...

  7. ES6箭头函数(Arrow Functions)

    ES6可以使用“箭头”(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器). 一.语法 1. 具有一个参数的简单函数 var single = a => a single('he ...

  8. Javascript进度条

    一个简单的进度条演示. <!doctype html> <html> <head> <meta charset="utf8"> &l ...

  9. hdu Dylans loves tree [LCA] (树链剖分)

    Dylans loves tree view code#pragma comment(linker, "/STACK:1024000000,1024000000") #includ ...

  10. Python地址簿

    #!/usr/bin/python #coding=UTF-8 # FileName:address.py # Python地址簿 import cPickle as p; import os; im ...