文档章节

C#异步方法执行

sucanber
 sucanber
发布于 2015/08/14 09:55
字数 428
阅读 271
收藏 1

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
粉丝 8
博文 61
码字总数 14349
作品 0
浦东
私信 提问
异步编程(async&await)

前言 本来这篇文章上个月就该发布了,但是因为忙 QuarkDoc 一直没有时间整理,所以耽搁到今天,现在回归正轨。 C# 5.0 虽然只引入了2个新关键词:async和await。然而它大大简化了异步方法的编...

Jonins
09/12
0
0
C# 5.0与VB.NET 有哪些新玩意

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

junwong
2012/08/16
4.3K
15
C# 5.0与VB.NET 有哪些新玩意

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

曾沙
2012/11/27
355
0
异步任务中的重新进入(Reentrancy)

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

WPwalter
2017/12/30
0
0
C#多线程编程系列(四)- 使用线程池

目录 1.1 简介 1.2 在线程池中调用委托 1.3 向线程池中放入异步操作 1.4 线程池与并行度 1.5 实现一个取消选项 1.6 在线程池中使用等待事件处理器及超时 1.7 使用计时器 1.8 使用BackgroundW...

InCerry
08/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-2

上篇文章(java框架学习日志-1)虽然跟着写了例子,也理解为什么这么写,但是有个疑问,为什么叫控制反转?控制的是什么?反转又是什么? 控制其实就是控制对象的创建。 反转与正转对应,正转...

白话
21分钟前
0
0
Integer使用双等号比较会发生什么

话不多说,根据以下程序运行,打印的结果为什么不同? Integer a = 100;Integer b = 100;System.out.println(a == b);//print : trueInteger a = 200;Integer b = 200;System.out.pr...

兜兜毛毛
昨天
8
0
CockroachDB

百度云上的CockroachDB 云数据库 帮助文档 > 产品文档 > CockroachDB 云数据库 > 产品描述 开源NewSQL – CockroachDB在百度内部的应用与实践 嘉宾演讲视频及PPT回顾:http://suo.im/5bnORh ...

miaojiangmin
昨天
4
0
I2C EEPROM驱动实例分析

上篇分析了Linux Kernel中的I2C驱动框架,本篇举一个具体的I2C设备驱动(eeprom)来对I2C设备驱动有个实际的认识。 s3c24xx系列集成了一个基于I2C的eeprom设备at24cxx系列。at24cxx系列芯片包...

yepanl
昨天
5
0
设计模式之工厂模式

本篇博文主要翻译这篇文章: https://www.journaldev.com/1392/factory-design-pattern-in-java 由于翻译水平有限,自认为许多地方翻译不恰当,欢迎各位给出宝贵的建议,建议大家去阅读原文。...

firepation
昨天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部