多线程的异步调用(一)

原创 2004年10月06日 19:58:00


最近手头做的项目中,用到了多线程的异步调用。在控制线程中实时的检测硬件的变化,如果硬件发生了某些变化,那么需要通知别的模块做一些相应的操作,为了让这些操作不会影响控制线程的继续运行,就在多线程中使用了异步调用的方法。

using System;

using System.Threading;

 

namespace WindowsApplication1

{

 

    public class Async

    {

        AsyncMenthod dlgt = new AsyncMenthod(DealClass.dealFunction);

 

        private int index = 0;

 

        public Async()

        {

            Thread controlThread = new Thread(new ThreadStart(ControlThreadProc));

            controlThread.Priority=System.Threading.ThreadPriority.AboveNormal;

            controlThread.IsBackground = true;

            controlThread.Start(); //启动一个线程     

        }

 

        public void ControlThreadProc()

        {

            while( index < 5 )

            {  

                index++ ;          

                dlgt.BeginInvoke(index,null,null);//进行异步调用,并且不要求回调等     

                Console.WriteLine( index.ToString() + " Called At "+System.DateTime.Now.ToString() );

                System.Threading.Thread.Sleep(100);

            }

        }

 

        public delegate void AsyncMenthod( int callID ); //和被异步调用的函数必须具有相同的参数,函数名可以不同

 

    }

    public class DealClass

    {

        public static void dealFunction( int callID ) //被异步调用的函数

        {

            Console.WriteLine( callID.ToString() + " Start Deal At "+System.DateTime.Now.ToString());

            System.Threading.Thread.Sleep(2000);

            Console.WriteLine( callID.ToString() +  "Deal Complete At "+System.DateTime.Now.ToString());

           

        }

    }

}

 

输出:

1 Called At 2004-10-6 19:44:01

1 Start Deal At 2004-10-6 19:44:01

2 Called At 2004-10-6 19:44:02

3 Called At 2004-10-6 19:44:02

4 Called At 2004-10-6 19:44:02

5 Called At 2004-10-6 19:44:02

2 Start Deal At 2004-10-6 19:44:02

3 Start Deal At 2004-10-6 19:44:03

4 Start Deal At 2004-10-6 19:44:03

1Deal Complete At 2004-10-6 19:44:03

5 Start Deal At 2004-10-6 19:44:03

2Deal Complete At 2004-10-6 19:44:04

3Deal Complete At 2004-10-6 19:44:05

4Deal Complete At 2004-10-6 19:44:05

5Deal Complete At 2004-10-6 19:44:05


从输出里,很明显的可以看出,控制线程中的函数,并没有等待处理函数处理完毕,而是直接返回,并继续往下执行了。

在处理函数中,它会把这些请求都处理,并且是这样进行处理的:

每来一个请求,它就开始进行处理(类似起一个独立的线程),它不并不会等待前面的处理完毕,然后再来处理新的请求。处理完毕后,返回。

 

异步调用和多线程的架构设计

继续分析架构设计,http call
  • wandd
  • wandd
  • 2014年11月03日 15:54
  • 954

Java异步调用-多线程实现

异步调用,当请求延时或超时状态下,为了更高效率执行任务,对任务进行异步操作。 此处使用java多线程来实现异步调用,当方法执行时,使用新的线程来执行指定方法。 这里写代码片...
  • zqbx7
  • zqbx7
  • 2016年11月03日 11:27
  • 4984

关于EJB异步调用遇到的问题解决

近日看到ejb异步调用相关文章,突然有兴趣试下,做个示例程序都是磕磕绊绊的,所幸最后都解决了,在这里记录下遇到的问题和解决版本,希望对大家有所帮助。 异步ejb? Asynchronous Ses...
  • yuanxiaojiao0012
  • yuanxiaojiao0012
  • 2017年01月09日 15:59
  • 380

C#多线程实现方法——异步委托/调用

C#异步调用(Asynchronou Delegate) C#异步调用获取结果方法:主要有三种,也可以说是四种(官方说四种,电子书说三种),官方在MSDN上已经有详细的说明: 链接 需要了解到获取...
  • razorluo
  • razorluo
  • 2012年12月26日 20:44
  • 12929

spring cloud学习笔记3(同步调用、异步调用、响应式调用)

1.同步调用  同步调用,在学习笔记2就是同步调用 2.异步调用 修改service package com.study.cloud.consumer.services; import ...
  • youlangta
  • youlangta
  • 2018年01月25日 10:05
  • 31

Java多线程--异步执行框架Executor

Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程解耦开发,基于生产者-消费者模式,其提交任务的线程相当于生产者,执行任务...
  • hello_worldee
  • hello_worldee
  • 2017年09月07日 13:26
  • 642

SpringCloud(第 047 篇)注解式Async配置异步任务

SpringCloud(第 047 篇)注解式Async配置异步任务-一、大致介绍1、有时候我们在处理一些任务的时候,需要开启线程去异步去处理,原有逻辑继续往下执行; 2、当遇到这种场景的时候,线程是...
  • YLIMH_HMILY
  • YLIMH_HMILY
  • 2017年10月21日 14:38
  • 440

axis2系列之异步调用

异步调用是指客户端发出调用服务端的请求,不必一直等待服务器的响应,在服务器返回结果之前,客户端可以执行其他的操作。 客户端异步调用web service ,服务端web service与普通web ...
  • u013313550
  • u013313550
  • 2016年11月22日 10:22
  • 516

SpringBoot集成篇(二) 异步调用Async

什么是异步调用? 异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步程序执行完即可执行。 如何实现异步调用? 多线...
  • v2sking
  • v2sking
  • 2017年05月28日 22:46
  • 6271

Java Design Demo--多线程(三)多线程异步示例

最近都在看传智播客张孝祥的视频 受益匪浅 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1. 。看了别人的代码感觉确实学习了很多 package demo; publi...
  • b275518834
  • b275518834
  • 2013年03月08日 17:38
  • 1399
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多线程的异步调用(一)
举报原因:
原因补充:

(最多只允许输入30个字)