BeginInvoke()使用

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Xml;
using System.Threading;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(
"Client application is starting!");
Thread.CurrentThread.Name
= "Main Thread";
Cal cal
= new Cal();
AddDelegate del
= new AddDelegate(cal.Add);

// 需要保存 IAsyncResult 对象以便后边条用EndInvoke方法时作参数传递
IAsyncResult asyncResult = del.BeginInvoke(5, 6, null, null);

// 做某些其它的事情,模拟需要执行 3 秒钟
for (int i = 1; i <= 3; i++)
{
Thread.Sleep(TimeSpan.FromSeconds(i));
Console.WriteLine(
"{0}: Client executed {1} second(s).", Thread.CurrentThread.Name, i);
}

// 传递 IAsyncResult 对象
int rtnVal = del.EndInvoke(asyncResult);
Console.WriteLine(
"Result: {0}\n", rtnVal);

Console.WriteLine("\nPress any key to exit...");
Console.ReadLine();

}

public delegate int AddDelegate(int a, int b);

public class Cal
{
public int Add(int a, int b)
{
if (Thread.CurrentThread.IsThreadPoolThread)
{
Thread.CurrentThread.Name
= "Pool Thread";
}
Console.WriteLine(
"Method invoked!");

// 做某些其它的事情,模拟需要执行 2 秒钟
for (int i = 0; i < 2; i++)
{
Thread.Sleep(TimeSpan.FromSeconds(
1));
Console.WriteLine(
"{0}: Add executed {1} second(s).", Thread.CurrentThread.Name, i);
}
Console.WriteLine(
"Method complete!");
return a + b;
}
}
}
}

复制代码

 

posted @ 2020-07-08 14:56  奋斗的中年人哈哈哈  阅读(407)  评论(0)    收藏  举报