Nav*_*K N 10 .net c# multithreading asynchronous
简而言之,C#3.0说异步方法和异步委托看起来很相似,但行为却截然不同.
这是本书所说的两者.
该书还说,异步方法的目的是允许许多任务在少数线程上运行; 异步委托的目的是与调用者并行执行任务.
当我通过反射器查看System.IO.Stream类中的BeginRead()方法时,它正在使用委托并在其上调用BeginInvoke.因此异步方法在内部使用异步委托.
有什么想法吗?
在核心,当您使用回调调用BeginFoo()时,您可能会看到两个主要行为.
当您使用委托时,会发生上述行为#1.
某些API(具有对非阻塞IO调用的底层支持)支持行为#2.
在'Stream'的特定情况下,我不确定,但我的猜测是它是一个抽象基类,所以这只是一个只实现Read同步版本的子类的默认行为.'good'子类将覆盖BeginRead/EndRead以具有非阻塞实现.
正如你所说,#2的优势在于你可以拥有100个待处理的IO调用而不需要消耗100个线程(线程很昂贵).
BackgroundWorker,ThreadPool.QueueUserWorkItem或Parallel.For(等)我想这本书试图强调的是代表们总是包含这种模式:
Invoke可以阻止的同步调用()BeginInvoke除非线程池已饱和,否则不应该真正阻塞的异步调用()但它不是唯一的模式.也; 最近(例如,Silverlight中的异步IO方法,或者WebClient):而不是a IAsyncResult,事件用于表示完成.
| 归档时间: |
|
| 查看次数: |
4365 次 |
| 最近记录: |