/// <summary> /// 调用示例 /// </summary> public void InvokeTest() { TodoHandler handler = new TodoHandler(Todo); handler.BeginInvoke(TodoCallback, handler); } }
参考很多类异步方法命名方式BeginXXX和EndXXX,对上面类稍做修改:
代码如下
复制代码
public class Test { public int Todo(int a, int b) { return a + b; }
private delegate int TodoHandler(int a, int b); private TodoHandler _todo = null;
public Test() { _todo = Todo; }
public IAsyncResult BeginTodo(int a, int b, AsyncCallback callback, object state) { return _todo.BeginInvoke(a, b, callback, state); }
public int EndTodo(IAsyncResult ar) { return _todo.EndInvoke(ar); } }
public class Program { static void TodoCallback(IAsyncResult ar) { Test test = (Test)ar.AsyncState; Console.WriteLine(test.EndTodo(ar)); }
static public void Main(string[] args) { Test test = new Test(); test.BeginTodo(2, 3, TodoCallback, test);
Console.ReadKey(); } }
BeginTodo方法返回类型为IAsyncResult,网上看到有人这么调用:
代码如下
复制代码
static public void Main(string[] args) { Test test = new Test(); IAsyncResult result = test.BeginTodo(2, 3, null, null); Console.WriteLine(test.EndTodo(result));