using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading;
namespace ConsoleApp5
{
// <summary>
/// 定義一個委託類型
/// </summary>
public delegate string Del();
/// <summary>
/// 異步編程實現類(主線程不會阻塞)
/// </summary>
public class AsynCallbackClass
{
public static string result;
public static void Main(string[] args)
{
Del del = new Del(TaskClass.SleepTask);
//開始執行異步操作,TaskClass.SleepTask無參數,Callback爲定義的回調方法.
for (int i = 0; i < 2; i++)
{
del.BeginInvoke(Callback, null);
}
Console.ReadLine();
}
/// <summary>
/// 回調方法
/// </summary>
/// <param name="ar"></param>
public static void Callback(IAsyncResult ar)
{
AsyncResult asyncResult = ar as AsyncResult;
if (asyncResult == null) { return; }
Del del = asyncResult.AsyncDelegate as Del;
if (del == null) { return; }
Console.WriteLine("回調方法中調用EndInvoke()方法,獲取異步任務結果.\n", Thread.CurrentThread.ManagedThreadId);
//結束執行異步操作,並返回異步任務結果.
result = del.EndInvoke(ar);
Console.WriteLine(result);
}
}
/// <summary>
/// 任務類
/// </summary>
public class TaskClass
{
public static string SleepTask()
{
Thread.Sleep(5000);
return "異步線程執行成功.\n" + "---" + DateTime.Now.ToString();
}
}
}