关于委托和线程
关于委托和线程
无意间看到一个奇葩的解释,说委托的本质的就是多线程,这......
委托本质就是一个函数的指针而已,和线程完全是不同的概念;如果非要扯上点关系,就是同步委托和异步委托。同步委托就是占用主线程同步执行,异步委托肯定是开启新的线程去执行委托指向的函数。多播委托其实也是一样的,无非就是绑定了多个函数的指针,依次执行而已。
同步调用Invoke
异步调用BeginInvoke
- BeginInvoke 是基于ThreadPool中的线程实现异步的,不像是控件的BeginInvoke方法总是使用UI线程。
- IAsyncResult 可用于检测异步调用的过程。
- AsyncCallback 该委托用于指定在异步操作完成后回调函数。
class Program
{
//创建函数
private static int newTask(int ms)
{
Console.WriteLine("任务开始");
Thread.Sleep(ms);
Random random = new Random();
int n = random.Next(10000);
Console.WriteLine("任务完成");
return n;
}
delegate int DelTask(int ms);
static void Main(string[] args)
{
DelTask dt = newTask;
//第一个参数是调用work方法的参数,第二个是回调函数,第三个是需要传到回调函数里的参数可以是Object类型
dt.BeginInvoke(2000, ar =>
{
//IAsyncResult result = ar.AsyncState as IAsyncResult;
var t = ar.AsyncState.ToString();
Console.WriteLine(t);
}, "string参数");
Console.ReadKey();
}
}