C# 开始考虑使用或不使用

C# 开始考虑使用或不使用,c#,C#,我目前想使用调用函数A中的函数B,以避免阻塞函数A。我认为BeginInvoke似乎是个好办法 但我不禁要问自己,我真的需要这个吗?调用异步线程不会比从函数A调用函数B实际执行函数长吗?此外,如果我的函数A的循环速度比函数B的执行速度快,会发生什么情况 编辑: 它的用途是执行跟踪调试函数,对调用者的影响最小 我有点迷路了,谢谢你的帮助 非常感谢只有在调用需要相当长的时间才能执行时,进行异步调用才有意义 如果您调用的方法只是做了一些简单的事情然后返回,那么调用它要比创建另一个线程并启动它更快 如果

我目前想使用调用函数A中的函数B,以避免阻塞函数A。我认为BeginInvoke似乎是个好办法

但我不禁要问自己,我真的需要这个吗?调用异步线程不会比从函数A调用函数B实际执行函数长吗?此外,如果我的函数A的循环速度比函数B的执行速度快,会发生什么情况

编辑:

它的用途是执行跟踪调试函数,对调用者的影响最小

我有点迷路了,谢谢你的帮助


非常感谢

只有在调用需要相当长的时间才能执行时,进行异步调用才有意义

如果您调用的方法只是做了一些简单的事情然后返回,那么调用它要比创建另一个线程并启动它更快


如果你在循环中调用该方法,那么你应该考虑使用<代码> AsStase< /Cult>方法来完成。它将限制用于执行该工作的线程数量,而不是盲目地启动大量线程。

通过BeginInvoke进行调用已经是一种传统,因为现在已经有了更好的异步机制

例如,以下代码在不阻塞GUI线程的情况下执行一些长时间运行的操作:

await Task.Run(() =>
{
    //do something that takes time.


}).ConfigureAwait(true);
您可以省略
ConfigureAwait(true)因为默认值为true。但我喜欢将其保留在代码中,因为它记录了我在GUI线程上长时间运行操作后继续的意图

关于异步等待模式有很多信息。这里还有stackexchange和Stephen Cleary的一些有趣的howto。
只要用谷歌搜索一下,即使是MSDN信息也不坏。

要添加到@guffa中,您还必须小心web上下文中的线程,因为线程中没有线程标识