C#BeginInvoke使用或不使用

时间:2015-03-28 10:34:54

标签: c#

我目前想要使用功能A 中的功能B 来避免阻止功能A 。我认为BeginInvoke似乎是一个很好的解决方案。

但是我开始问自己,我真的需要这个吗?调用异步线程并不比通过从函数A调用函数B实际执行函数更长?此外,如果我的函数A比函数B的执行循环更快,会发生什么?

修改

使用此方法的做法是对调用者产生影响最小的跟踪调试功能。

我有点失落,我很感激你的帮助

非常感谢

2 个答案:

答案 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信息都没有坏。

相关问题