一段异步方式调用同步方法代码
执行顺序 执行主程序>>执行异步调用>>执行WaitOne()后代码>>执行回调>>执行主程序
执行顺序 执行主程序>>执行异步调用>>执行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("异步任务完成");
}
}
}
}
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("异步任务完成");
}
}
}
}