我需要高效的(使用尽可能少的线程)异步计算方式(我使用.net 4)。一种方法是
ThreadPool.QueueUserWorkItem(f => job.DoWork());
job.Completed += (a, b) => {...} //Completed is event I fire when work is done
另一种可能性是在 C# v.5 之前实现异步方法,这基本上是调用BeginInvoke
委托。
我的问题是:除了语法不同之外,这两者之间是否有区别,因为它似乎BeginInvoke
也在使用来自的新线程ThreadPool
?
顺便说一句:是否可以在与调用者相同的线程上异步定义和调用方法(就像在 javascript 中所做的那样)(在任何版本的 C# 中)?