C# 开启多个线程,各线程有回调函数,且互不影响

赤道上的小熊又来了,在使用委托异步编程时,如果需要循环开启N个线程,会出现一个不定时异常(回调函数的IAsyncResult 为NULL),采用下列方法可解决该问题,如下

  public   class Class2
    {
        public delegate string AsynchronousTask(string threadName);//定义委托
        AsynchronousTask asynchronousTask;//委托变量
        public Class2()
        {
            asynchronousTask = ExeMthod ;//【3】将委托与执行方法关联
        }
        public void Exe()
        {
            List<IAsyncResult> taskList = new List<IAsyncResult>();
            //2、开启线程
            for (int i = 1; i < 10; i++)
            {
                IAsyncResult result = asynchronousTask.BeginInvoke((i*10).ToString (), CallBack, i.ToString ());
            }

            List<Task> lista = new List<Task>();
            lista.Add(Task.Run(() =>
            {
                foreach (IAsyncResult item in taskList)
                {
                    item.AsyncWaitHandle.WaitOne();

                }

            }));
            //3、一组计划完成时执行
            Task.Factory.ContinueWhenAll(lista.ToArray(), t =>
            {
                Console.WriteLine(" 一组计划执行完成:");
            });

        }


        private string ExeMthod(string strPlanID) //执行的方法
        {
            System.Threading.Thread.Sleep(5000);//延时5秒
            return ((strPlanID).ToString());
        }
        private void CallBack(IAsyncResult ar) //回调函数
        {
            string strRes = asynchronousTask.EndInvoke(ar);//执行结果
            string strPlan = (string )ar.AsyncState; //计划ID


            Console.WriteLine("线程ID  " + Thread.CurrentThread.ManagedThreadId + "----"+strPlan+ " 回调函数结果:" + strRes);
        }
    }
发布了3 篇原创文章 · 获赞 2 · 访问量 112

猜你喜欢

转载自blog.csdn.net/aixiaoxiong/article/details/104537686