C# APM 异步编程例子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Remoting.Messaging;
namespace Asynchronous
{
public class AsyncClass
{
public AsyncClass() { }
/// <summary>
/// 待执行方法
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
private string SayHi(string name)
{
System.Threading.Thread.Sleep(2000);
return name;
}
/// <summary>
/// 回调方法
/// </summary>
/// <param name="result"></param>
private void CallBack(IAsyncResult result)
{
string AsyncResult = string.Empty;
if (result.IsCompleted) {
Func<string, string> delegageFunc = ((result as AsyncResult).AsyncDelegate) as Func<string, string>;
if (delegageFunc != null){
AsyncResult = delegageFunc.EndInvoke(result);
Console.WriteLine(AsyncResult);
}
}
}
/// <summary>
/// 异步执行方法
/// </summary>
/// <param name="name"></param>
public void AsyncSend(string name) {
Func<string, string> func = SayHi;
func.BeginInvoke(name, new AsyncCallback(CallBack), null);
}
// PS:BeginInvoke 最后一个object类型参数的值会在回调函数的result.AsyncState 中体现
}
}
class Program
{
static void Main(string[] args)
{
AsyncClass asyncClass = new AsyncClass();
asyncClass.AsyncSend("jack");
Console.WriteLine("Hello world");
Console.Read();
}
}
执行结果: