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();
            }
        }
    }
  • 相关阅读:
    [杂题笔记]2021.08.18-2021.09.03,CF#741 Div.2&CF#736 Div.2&CF Global Round15&CF#739 Div3
    第一次博客作业
    《博弈论》
    迭代法-二分迭代求解低阶线性方程
    迭代法-牛顿迭代法
    logback扩展日志输出功能
    log4j2扩展日志输出功能
    c# clr创建mssql的存储过程、函数
    驰骋BPM,工作流
    Docker部署RocketMQ踩坑记录
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1535731.html
Copyright © 2011-2022 走看看