异步方式调用同步方法

一段异步方式调用同步方法代码

执行顺序   执行主程序>>执行异步调用>>执行WaitOne()后代码>>执行回调>>执行主程序

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 Program
{
    
public class Programmers
    
{

        
public static void Main(string[] args)
        
{
            Programmers pr 
= new Programmers();
            Console.WriteLine(
"开始执行..");
            pr.smork();
            Thread.Sleep(
1000);//注释掉结果有点不同
            Console.WriteLine("我是主线程");
            Console.ReadLine();


        }

        
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(
"异步调用后");

            
MyRegion

        }


        
public void move()
        
{
            
for (int i = 0; i < 5; i++)
            
{
                Console.WriteLine(
"异步任务执行");
                Thread.Sleep(
1000);

            }


        }


        
public void tellyou(IAsyncResult result)//回调函数
        {
           
// Console.WriteLine("异步任务完成");//当异步完成后输出结果 通知已经异步完了

            AsyncResult asyncResult 
= result as AsyncResult;

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

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

        }

    }


}


原文地址:https://www.cnblogs.com/xiaobaigang/p/927920.html