线程,任务,同步之异步回调

时间:2022-09-10 18:32:34
/*
线程,任务,同步之异步回调
*/
using System;
using System.Threading;
using System.Diagnostics;

namespace Frank
{
	public class Test
    {
		public delegate int TakesAWhileDelegate(int data,int ms);
		//程序入口
        public static void Main(string[] args)
        {
			TakesAWhileDelegate dl = new TakesAWhileDelegate(TakesAWhile);
			//IAsyncResult ar = dl.BeginInvoke(1,3000,TakesAWhileCompleted,null);//异步执行
			//Lambda表达式
			dl.BeginInvoke(1,3000,ar=>{int result = dl.EndInvoke(ar);Console.WriteLine("result:{0}",result);},null);
			for(int i =0;i<100;i++)
			{
				Console.Write(".");
				Thread.Sleep(50);
			}
		}
		static int TakesAWhile(int data,int ms)
		{
			Console.WriteLine("TakesAWhile started");
			Thread.Sleep(ms);
			Console.WriteLine("TakesAWhile completed");
			return ++data;
		}
		///<summary>
		/// 回调函数
		///</summary>
		static void TakesAWhileCompleted(IAsyncResult ar)
		{
			if(ar == null)
			{
				throw new ArgumentNullException("ar");
			}
			TakesAWhileDelegate d1 = ar.AsyncState as TakesAWhileDelegate;
			Trace.Assert(d1!=null,"Invalid object type");
			int result = d1.EndInvoke(ar);
			Console.WriteLine("result:{0}",result);
		}
	}
}

  

相关文章