文档章节

C#异步方法执行

sucanber
 sucanber
发布于 2015/08/14 09:55
字数 428
阅读 264
收藏 1
点赞 0
评论 0

C#异步方法执行转于http://blog.csdn.net/wanlong360599336/article/details/8781477

using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Threading;  
using System.Runtime.Remoting.Messaging;  
  
namespace ConsoleApplication1  
{  
    public delegate int AddHandler(int a, int b);  
    public class AddMethod  
    {  
        public static int Add(int a, int b)  
        {  
            Console.WriteLine("开始计算:" + a + "+" + b);  
            Thread.Sleep(3000); //模拟该方法运行三秒  
            Console.WriteLine("计算完成!");  
            return a + b;  
        }  
    }  
      
          
    //**************同步调用***********  
    //委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行。  
  
    //**************异步调用***********  
    //异步调用不阻塞线程,而是把调用塞到线程池中,程序主线程或UI线程可以继续执行。  
    //委托的异步调用通过BeginInvoke和EndInvoke来实现。  
  
    //**************异步回调***********  
    //用回调函数,当调用结束时会自动调用回调函数,解决了为等待调用结果,而让线程依旧被阻塞的局面。  
  
    //注意: BeginInvoke和EndInvoke必须成对调用.即使不需要返回值,但EndInvoke还是必须调用,否则可能会造成内存泄漏。  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            Console.WriteLine("===== 同步调用 SyncInvokeTest =====");  
            AddHandler handler = new AddHandler(AddMethod.Add);  
            int result=handler.Invoke(1,2);  
            Console.WriteLine("继续做别的事情。。。");  
  
            Console.WriteLine(result);  
            Console.ReadKey();  
  
  
            Console.WriteLine("===== 异步调用 AsyncInvokeTest =====");  
            AddHandler handler1 = new AddHandler(AddMethod.Add);  
            IAsyncResult result1=handler1.BeginInvoke(1,2,null,null);  
            Console.WriteLine("继续做别的事情。。。");  
  
            //异步操作返回  
            Console.WriteLine(handler1.EndInvoke(result1));  
            Console.ReadKey();  
  
            Console.WriteLine("===== 异步回调 AsyncInvokeTest =====");  
            AddHandler handler2 = new AddHandler(AddMethod.Add);  
            IAsyncResult result2 = handler2.BeginInvoke(1, 2, new AsyncCallback(Callback), null);  
            Console.WriteLine("继续做别的事情。。。");  
            Console.ReadKey();  
  
  
            //异步委托,也可以参考如下写法:  
            //Action<object> action=(obj)=>method(obj);  
            //action.BeginInvoke(obj,ar=>action.EndInvoke(ar),null);  
            //简简单单两句话就可以完成一部操作。  
        }  
        static void Callback(IAsyncResult result)  
        {  
            AddHandler handler = (AddHandler)((AsyncResult)result).AsyncDelegate;  
            Console.WriteLine(handler.EndInvoke(result));  
        }  
    }  
}






本文转载自:http://blog.csdn.net/wanlong360599336/article/details/8781477

共有 人打赏支持
sucanber
粉丝 7
博文 61
码字总数 14349
作品 0
浦东
C# 5.0与VB.NET 有哪些新玩意

1,异步编程 因为在移动设备上,程序的响应速度实在是一个太重要的问题,所以对于应用被触摸后的反应也是同等重要。 在 Windows Runtime 中,设计师总是要考虑如果一个交互式操作需要耗费大于...

junwong
2012/08/16
4.1K
15
异步任务中的重新进入(Reentrancy)

一个按钮,点击执行一个任务。我们可能直接在它的 事件中写下了执行任务的代码。 一般我们无需担心这样的代码会出现什么问题——但是,这样的好事情只对同步任务有效;一旦进入了异步世界,这...

WPwalter
2017/12/30
0
0
异步与线程阻塞

应该这样理解它 异步,早期开发人员对它有很多误解,认为不阻塞主线程就是异步,更有认为不阻塞UI就是异步,但异步归根结底和这两个东西关系并不大,异步的出现主要是为了提高线程的利用率,...

mcy247
2017/12/05
0
0
C#~异步编程再续~async异步方法与同步方法的并行

今天晚上没事写了个测试的代码,又看了看.net的并行编程,两个方法,一个是异步async修饰的,另一个是普通的方法,在控制台程序的Main方法里去调用这两个方法,会有什么结果呢? 首先我们看一...

mcy247
2017/12/05
0
0
C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装

原文:C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装 1、SocketAsyncEventArgs介绍 SocketAsyncEventArgs是微软提供的高性能异步Socket实现类,主要为高性能网络服务器应用程序而...

杰克.陈
2017/12/06
0
0
C# WinForm开发系列 - Thread/Delegate/Event

C#是一门支持多线程的语言,因此线程的使用也是比较常见的。由于线程的知识在Win32编程的时候已经说得过多,所以在.Net中很少介绍这部分(可能.Net不觉得这部分是它所特有的)。那我们为什么...

长征2号
2017/10/11
0
0
C#网络编程系列文章(七)之UdpClient实现异步UDP服务器

原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列目录 C#网络编程系列文章(一)之Socket实现异步TCP服务器 C#网络编...

zhujunxxxxx
2015/03/16
0
0
C#:异步编程和线程的使用(.NET 4.5 )

异步编程和线程处理是并发或并行编程非常重要的功能特征。为了实现异步编程,可使用线程也可以不用。将异步与线程同时讲,将有助于我们更好的理解它们的特征。 本文中涉及关键知识点 1. 异步...

葡萄城控件技术团队
2015/06/09
0
1
如何实现一个可以用 await 异步等待的 Awaiter

.NET 和 C# 共同给我们带来的 / 异步编程模型(TAP)用起来真的很爽。为了实现异步等待,我们只需要在一切能够能够异步等待的方法前面加上 即可。能够异步等待的最常见的类型莫过于 ,但也有...

WPwalter
2017/10/29
0
0
C# WinForm开发系列 - Socket/WCF/Rometing/Web Services

当今社会是一个信息化社会, 网络越来越多地影响人民的生活, 带来巨大的便利性; 而网络通信在软件开发中占据相当大的比重. Socket/WCF/Rometing/Web Services 各种技术纷至踏来, 应用广泛; 而...

长征2号
2017/08/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java 重写排序规则,用于代码层级排序

1.dataList 是个List<Map<String,Object>> 类型的数据,所以比较的时候是冲map中获取数据,并且数据不能为空。 2.dataList 类型是由自己定义的,new Comparator<Map<String,Object>> 也是对应......

轻量级赤影
2分钟前
0
0
分布式大型互联网企业架构!

摘要: 开发工具 1.Eclipse IDE:采用Maven项目管理,模块化。 2.代码生成:通过界面方式简单配置,自动生成相应代码,目前包括三种生成方式(增删改查):单表、一对多、树结构。生成后的代码...

明理萝
2分钟前
0
1
对MFC程序的一点逆向分析:定位按钮响应函数的办法

因为消息响应函数保存在AFX_MSGMAP_ENTRY数组中, 观察nMessage、nCode、nID、pfn利用IDA在rdata段中搜索即可, 在IDA中找到代码段基址0x401000,函数地址0x403140, 在WinDbg中运行!addre...

oready
3分钟前
0
0
阻抗匹配与史密斯(Smith)圆图基本原理

参考:http://bbs.eeworld.com.cn/thread-650695-1-1.html

whoisliang
8分钟前
0
0
maven配置文件分离

一、 简介 遇到很多次别人处理的项目,测试环境,本地开发和线上环境的配置不一样,每一次部署都要重新修改配置文件,提交审核代码,才能打包,非常不方便。 其实相信很多人都知道可以使用m...

trayvon
8分钟前
0
0
MacOS和Linux内核的区别

导读 有些人可能认为MacOS和Linux内核有相似之处,因为它们可以处理类似的命令和类似的软件。甚至有人认为苹果的MacOS是基于linux的。事实上,这两个内核的历史和特性是非常不同的。今天,我...

问题终结者
24分钟前
1
0
SpringBoot | 第八章:统一异常、数据校验处理

前言 在web应用中,请求处理时,出现异常是非常常见的。所以当应用出现各类异常时,进行异常的捕获或者二次处理(比如sql异常正常是不能外抛)是非常必要的,比如在开发对外api服务时,约定了响...

oKong
32分钟前
0
0
mysql高级

一、存储引擎 InnoDB MyISAM 比较 二、数据类型 整型 浮点数 字符串 时间和日期 三、索引 索引分类 索引的优点 索引优化 B-Tree 和 B+Tree 原理 四、查询性能优化 五、切分 垂直切分 水平切分...

丁典
53分钟前
1
0
rsync通过同步服务、系统日志、screen工具

rsync通过后台服务同步 在远程主机中建立一个rsync服务器,在服务器上配置好rsync的各种应用,然后将本机作为rsync的一个客户端连接远程的rsync服务器。 首先在A机器上建立并且配置rsync的配...

黄昏残影
今天
5
0
Spring Cloud Gateway 接口文档聚合实现

在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。 由于swagger2暂时不支持webflux 走...

冷冷gg
今天
137
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部