时间紧张,先记一笔,后续优化与完善。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Runtime.Remoting.Messaging;
namespace 异步委托
{
/// <summary>
/// 说明异步委托调用时会发生一个新的线程,不会阻塞主线程,
/// 前提是应用回调函数,而不是直接应用委托的.endinvoke方法获取结果
/// </summary>
class Program
{
public delegate int AddDel(int x, int y);
static void Main(string[] args)
{
//定义委托
AddDel addDel = new AddDel(AddFunc);
Console.WriteLine("主线程开始执行...{0}",Thread.CurrentThread.ManagedThreadId);
//开始异步调用委托
addDel.BeginInvoke(2, 3, Callback, 2); //第三个参数回调函数,第四个参数,额定参数
Console.WriteLine("主线程执行完毕!");
Console.ReadKey();
}
static int AddFunc(int x, int y)
{
Console.WriteLine("子线程在执行:{0}",Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(3000);
return x + y;
}
static void Callback(IAsyncResult ar)
{
AsyncResult asy = (AsyncResult)ar;
//获取代理信息
AddDel addDel = (AddDel)asy.AsyncDelegate;
//获取返回结果
int result = addDel.EndInvoke(ar);
//获取额定参数
int otherData = (int)asy.AsyncState;
Console.WriteLine("子线程执行完毕!{0},执行结果:{1},额定参数:{2}",Thread.CurrentThread.ManagedThreadId
,result,otherData);
}
}
}
文章结束给大家分享下程序员的一些笑话语录:
程序员打油诗
写字楼里写字间,写字间里程序员;
程序人员写程序,又拿程序换酒钱。
酒醒只在网上坐,酒醉还来网下眠;
酒醉酒醒日复日,网上网下年复年。
但愿老死电脑间,不愿鞠躬老板前;
奔驰宝马贵者趣,公交自行程序员。
别人笑我忒疯癫,我笑自己命太贱;
不见满街漂亮妹,哪个归得程序员。
---------------------------------
原创文章 By
异步和线程
---------------------------------