【发布时间】:2013-04-23 14:55:54
【问题描述】:
我很少使用线程、后台工作程序等,但从未尝试知道我们应该何时使用哪个以及每种技术在内部如何工作。所以在这里我问几个关于线程、异步调用方法、后台工作者或 TPL 的问题。我在这里道歉,我问了几个问题。我的要求是请阅读并详细回答。
当我们运行我们的应用程序时,应用程序会从一个称为主线程的线程开始。 GUI 相关控件是在另一个线程上创建的,我听说了多远……是真的吗?是否为 GUI 创建了任何线程?
当我们调用少数方法时,所有方法调用都是按顺序发生的,这意味着一个方法调用stand & end,然后下一个方法将启动,一切都发生在主线程中。这就是主线程被阻塞的原因。如果我们不想阻塞主线程,那么我们总是喜欢在另一个线程上异步运行方法。异步调用任何方法是否意味着在单独的线程上执行方法?如果不是,这是否意味着异步调用在同一线程中执行而不阻塞主线程的任何方法?如果是,那怎么可能。请详细解释。
当我们异步调用任何不阻塞主线程的方法时实际发生了什么?我需要知道幕后发生了什么。
通过thread.start调用方法和异步调用方法有什么区别?
后台工作者在同一个主线程或单独线程中异步执行方法?
当我们使用 thread.start 调用方法时,我如何指定回调,当我的方法完成时,将发生回调并让我知道该方法完成。我尝试使用 thread.start 找到这样的示例,但没有找到。所以帮我用示例代码来做吧。
任务并行库的主要目标是什么。 TPL 是否在主线程或单独线程中执行任何方法?
我们可以使用 thread.start 或后台工作程序或异步调用任何方法来解决我们的目的,那么有什么额外的东西给了人们使用它的 TPL?
【问题讨论】:
-
我正要回答,但我发现自己在重复自己。对 BackgroundWork 类进行一些研究,然后回来将您的问题修改为一个问题。如果您研究异步线程和同步线程之间的区别,那么每个问题都可以自己回答。我指出这没有建设性,因为您有 7 个不同的问题,而且大多数问题都非常广泛。
-
你应该每个问题问一个问题,而不是一个问题 7 个问题。正如 Ramhound 所说,其中一些问题要么相同,要么可以合并为一个问题,但其中一些问题不同,应该在他们自己的问题中。
标签: c# task-parallel-library backgroundworker threadpool