[英]is there a difference between ThreadPool.QueueUserWorkItem and delegate BeginInvoke
我需要高效的(使用尽可能少的线程)异步方式进行计算(并且我使用.net 4)。 一种方法是
ThreadPool.QueueUserWorkItem(f => job.DoWork());
job.Completed += (a, b) => {...} //Completed is event I fire when work is done
另一种可能性是如实施异步方法完成之前,C#5节,这基本上是调用BeginInvoke
上的委托。
我的问题是:除语法不同外,这两者之间是否有区别,因为BeginInvoke
似乎也在使用ThreadPool
的新线程?
顺便说一句:是否可以在与调用方相同的线程上异步定义和调用方法(如javascript中所做的那样)(在任何C#版本中)?
Delegate.BeginInvoke
将该方法放在ThreadPool
。 BeginInvoke
的优点是您可以使用IAsyncResult
,它可以用于监视异步调用的进度。 它的“兄弟”方法EndInvoke
检索异步调用的结果。 可以在BeginInvoke
之后的任何时间调用它。 如果异步调用尚未完成, EndInvoke
阻塞调用线程,直到完成。
请参阅: http : //msdn.microsoft.com/en-us/library/2e08f6yc.aspx
我来看看Task Parallel Library和Task类 。 任务并行库(TPL)提供了循环的并行执行,并且Task类允许您控制任务应在哪个线程中执行,这对于UI操作很重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.