zoukankan      html  css  js  c++  java
  • 用异步的方式调用同步方法


    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using System.Collections;
    using System.Threading;
    using System.IO;
    using System.Runtime.InteropServices;
    using System;
    using System.Runtime.Remoting.Messaging;

    namespace Test
    {
        
    class Program
        {

            
    delegate void mydelegate();

            
    private void smork()
            {
                
    //方法1
                AsyncCallback mycallback = new AsyncCallback(tellyou);//(回调函数)
                mydelegate mdg = new mydelegate(move);
                IAsyncResult result 
    = mdg.BeginInvoke(mycallback, null);
                result.AsyncWaitHandle.WaitOne();
    //等待异步完成
                Console.WriteLine("异步调用后");

                
    //方法2
                
    //AsyncCallback mycallback = new AsyncCallback(tellyou);
                
    //mydelegate mdg = new mydelegate(move);
                
    //IAsyncResult result = mdg.BeginInvoke(mycallback, null);
                
    //while (!result.IsCompleted)
                
    //{
                
    //    //Thread.Sleep(50);//不要与要有区别
                
    //}


                
    // 方法3(没有回调函数)
                
    // mydelegate mdg = new mydelegate(move);
                
    // IAsyncResult result = mdg.BeginInvoke(null, null);
                
    // while (!result.IsCompleted)
                
    // {
                
    //     //Thread.Sleep(60);
                
    // }
                
    // mdg.EndInvoke(result); //停止调用


                
    //方法4(没有回调函数)
                
    //mydelegate mdg = new mydelegate(move);
                
    //IAsyncResult result = mdg.BeginInvoke(null, null);
                
    //result.AsyncWaitHandle.WaitOne();
                
    //mdg.EndInvoke(result); //停止调用 


            }
            
            
    public void move()
            {
                
    for (int i = 0; i < 5; i++)
                {
                    Console.WriteLine(
    "异步任务执行");
                    Thread.Sleep(
    1000);
                }
            }
            
            
    public void tellyou(IAsyncResult result)//回调函数
            {
                AsyncResult asyncResult 
    = result as AsyncResult;

                mydelegate mydelegate 
    = asyncResult.AsyncDelegate as mydelegate;
                mydelegate.EndInvoke(result);

                
    if (result.IsCompleted)
                {
                    Console.WriteLine(
    "异步任务完成");
                }
            }

            
    static void Main(string[] args)
            {
                Program pr 
    = new Program();
                Console.WriteLine(
    "开始执行..");
                pr.smork();
                Thread.Sleep(
    1000);//注释掉结果有点不同
                Console.WriteLine("我是主线程");
                Console.ReadLine();
            }
        }
    }
  • 相关阅读:
    JVM垃圾收集器以及内存分配
    VisualVM工具的使用
    jstack的使用
    内存溢出的定位与分析
    JVM的内存模型
    JVM运行参数
    kafka-高效读写数据+zookeeper作用+事务
    重定向机制
    HTTP协议、时间戳
    TCP常见面试题 
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1535731.html
Copyright © 2011-2022 走看看