多线程的异步调用(一)


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

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


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

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值