一、区别和联系异步和多线程的区别是什么?其实异步才是目的,多线程才是实现的方式。异步是指A发起一个操作后(通常是一个耗时操作,如果这个操作不耗时,就不需要异步),它可以继续处理自己的事务,而不用等待这个耗时操作返回。.Net中的这种异步编程模型简化了多线程编程。我们甚至不需要关心Thread类来执行异步操作。有时用普通线程做异步,有时用系统的异步调用函数。有些IO操作也是异步的,但不一定需要线程来运行。例如:硬件有DMA功能。调用DMA传输数据时,CPU不需要进行处理。它只需要发起传输并等待传输结束。具体到.net平台,比如Socket的BeginSend,如果运行在Windows2000之后的平台,底层会调用异步完成端口发送。.Net中的异步执行实际上使用的是异步委托。异步委托将要执行的方法提交给.net的线程池,线程池中的线程执行异步方法。2.适用范围当需要进行I/O操作时,使用异步操作比较合适。I/O操作不仅包括直接的文件和网络读写,还包括数据库操作、WebService、HttpRequest、.netRemoting等跨进程调用。线程的适用范围是需要CPU长时间运行的场合,比如比较耗时的图形处理、算法执行等。3.异步的一个例子大家可能都知道,使用委托可以“自动”让一个方法被异步调用。直觉上,我认为另一个线程被编译器或CLR用来执行目标方法。是这样吗??让我们用一段代码来证明它。委托voidAsyncFoo(inti);staticvoidMain(string[]args){PrintCurrThreadInfo("Main()");for(inti=0;i<10;i++){PostAsync();}控制台.ReadLine();}//////输出当前线程信息//////方法名staticvoidPrintCurrThreadInfo(stringname){Console.WriteLine("+name+"的线程Id为:"+Thread.CurrentThread.ManagedThreadId+",当前线程为"+(Thread.CurrentThread.IsThreadPoolThread?"":"not")+"线程池线程。");}//////发布异步调用///staticvoidPostAsync(){AsyncFoocaller=newAsyncFoo(Foo);caller.BeginInvoke(1000,newAsyncCallback(FooCallBack),caller);}//////测试方法,休眠一段时间//////休眠时间staticvoidFoo(inti){PrintCurrThreadInfo("Foo()");线。睡觉(我);}静止的voidFooCallBack(IAsyncResultar){PrintCurrThreadInfo("FooCallBack()");AsyncFoo调用者=(AsyncFoo)ar.AsyncState;呼叫者.EndInvoke(ar);这段代码代码的输出如下:Main()的ThreadId为:1,当前线程不是线程池线程。Foo()的ThreadId为:3,当前线程为线程池线程。FooCallBack()的ThreadId为:3,当前线程为线程池线程。Foo()的ThreadId为:3,当前线程为线程池线程。Foo()的ThreadId为:4,当前线程为线程池线程。Foo()的ThreadId为:5,当前线程为线程池线程。FooCallBack()的ThreadId为:3,当前线程为线程池线程。Foo()的ThreadId为:3,当前线程为线程池线程。FooCallBack()的ThreadId为:4,当前线程为线程池线程。Foo()的ThreadId为:4,当前线程为线程池线程。Foo()的ThreadId为:6,当前线程为线程池线程。FooCallBack()的ThreadId为:5,当前线程为threadpo线程。Foo()的ThreadId为:5,当前线程为线程池线程。Foo()的ThreadId为:7,当前线程为线程池线程。FooCallBack()的ThreadId为:3,当前线程为线程池线程。Foo()的ThreadId为:3,当前线程为线程池线程。FooCallBack()的ThreadId为:4,当前线程为线程池线程。FooCallBack()的ThreadId为:6,当前线程为线程池线程。FooCallBack()的ThreadId为:5,当前线程为线程池线程。FooCallBack()的ThreadId为:7,当前线程为线程池线程。FooCallBack()的ThreadId为:3,当前线程为线程池线程。从输出中可以看出,.net使用委托“自动”生成的异步调用使用了另一个线程(并且是线程池线程)。以上就是C#学习教程:C#中的异步和多线程有特色地介绍了所有的分享内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: