我目前想要使用功能A 中的功能B 来避免阻止功能A 。我认为BeginInvoke似乎是一个很好的解决方案。
但是我开始问自己,我真的需要这个吗?调用异步线程并不比通过从函数A调用函数B实际执行函数更长?此外,如果我的函数A比函数B的执行循环更快,会发生什么?
修改
使用此方法的做法是对调用者产生影响最小的跟踪调试功能。
我有点失落,我很感激你的帮助
非常感谢
答案 0 :(得分:1)
只有在调用需要相当长的时间才能执行异步调用时才有意义。
如果你调用的方法做了一些简单的事情然后返回,那么调用它比创建另一个线程并启动它更快。
如果您在循环中调用该方法,那么您应该考虑使用AsParallel
方法来执行此操作。它将限制用于完成工作的线程数,而不是盲目地触发大量线程。
答案 1 :(得分:1)
通过BeginInvoke进行呼叫无论如何已经是遗留问题,因为现在已经有了更好的机制来实现异步。
例如,以下代码执行一些长时间运行的操作而不阻塞GUI线程:
await Task.Run(() =>
{
//do something that takes time.
}).ConfigureAwait(true);
你可以省略ConfigureAwait(true);
,因为true是默认值。但我喜欢将它保留在代码中,因为它记录了我在GUI线程上长时间运行操作后继续的意图。
有很多关于异步等待模式的信息。另外还有关于stackexchange和Stephen Cleary的一些有趣的方法。 只是谷歌一点,甚至MSDN信息都没有坏。