thread.currentthread属性返回的是当前正在执行的线程
一个应用程序域可以有多个线程,但是在一个时间点只能有一个线程在应用程序域内运行,win32线程调度程序和clr会根据需要让线程自由的跨越应用程序边界,如果要是访问正在加载当前线程的应用程序域,通过GetDomain ()
线程并发:如果一个线程正在调用一个对象的方法,为了让另一个线程也访问该方法则线程调度程序将挂起前一个线程,但是如果前一个线程没有前部完成当前的操作,后来的线程所读到的数据都是不准确的 。通过lock关键字,interlock类,monitor:提供同步访问,
同步,异步调用:同步就是阻塞整个线程直到被调用的这一个操作完成,异步则不会阻塞整个线程,直接执行下一行代码
通过委托来完成的同步操作比较耗时,我们可以将比较耗时的操作给一个单独的线程(用异步委托来实例化一个线程),而异步委托的begininvoke()方法返回的IAsyncResul则提供了异步操作的状态,通过判断IsCompleted 属性,给人一种同步调用线程的方式:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication16
{
public delegate int del(int x,int y);
class Program
{
static void Main(string[] args)
{
//通过线程类的ManagedThreadId属性返回当前正在执行的线程的id
Console .WriteLine (Thread .CurrentThread .ManagedThreadId );
del d = new del(add);
//通过委托的BeginInvoke()方法
IAsyncResult ir = d.BeginInvoke(10,10,null,null);
//通过IAsyncResult的IsCompleted属性获取异步操作是否已完成的指示。
while (!ir.IsCompleted)
{
Console.WriteLine("你完成了吗");
Thread.Sleep(1000);
}
int result = d.EndInvoke(ir);
Console.WriteLine(result);
Console.ReadLine();
}
static int add(int x, int y)
{
Console.WriteLine(Thread .CurrentThread .ManagedThreadId );
Thread.Sleep(5000);
return x + y;
}
}
}