异步编程
其他异步编程模式
三种标准模式
BeginInvoke 和 EndInvoke
using System;
using System.Threading;
namespace Test.NET_Framework
{
public delegate int MyDel(int a, int b);
class Program
{
public static int Sum(int a, int b)
{
Console.WriteLine($"\tSum... Thread:{Thread.CurrentThread.ManagedThreadId}");
Thread.Sleep(1000);
return a + b;
}
static void Main(string[] args)
{
var sum = new MyDel(Sum);
#region 直到完成(wait-until-done)
Console.WriteLine($"异步执行 Thread:{Thread.CurrentThread.ManagedThreadId}");
var iar = sum.BeginInvoke(100, 200, null, null);
var result = sum.EndInvoke(iar);
Console.WriteLine($"Result:{result} Thread:{Thread.CurrentThread.ManagedThreadId}");
#endregion
#region 轮询(poling)
//Console.WriteLine($"异步执行 Thread:{Thread.CurrentThread.ManagedThreadId}");
//var iar = sum.BeginInvoke(100, 200, null, null);
//while (!iar.IsCompleted)
//{
// Console.WriteLine("未完成...");
// Thread.Sleep(100);
//}
//var result = sum.EndInvoke(iar);
//Console.WriteLine($"Result:{result} Thread:{Thread.CurrentThread.ManagedThreadId}");
#endregion
#region 回调(callback)
//Console.WriteLine($"异步执行 Thread:{Thread.CurrentThread.ManagedThreadId}");
//sum.BeginInvoke(100, 200, iar =>
// {
// var myDel = (MyDel)iar.AsyncState;
// var result = myDel.EndInvoke(iar);
// Console.WriteLine($"Result:{result} Thread:{Thread.CurrentThread.ManagedThreadId}");
// }, sum);
#endregion
Console.WriteLine($"末尾! Thread:{Thread.CurrentThread.ManagedThreadId}");
Console.ReadLine();
}
}
}