了解与.NET和WPF的线程和同步

时间:2015-05-19 22:34:37

标签: c# wpf asynchronous task

我已在C++编程多年,然后转到.NET。到目前为止,一切都更容易理解,但我仍然在努力解决同步事情(理论上)。

我记得在 Stackoverflow 上看到,运行Task实际上创建了一个新线程!这让我很困惑。

异步任务如何在.NET中运行?

你能解释原因吗

var value = await Task<int>.Run(() => { return 10; } );

不会产生新线程?它取而代之的是什么?

此外,Dispatcher.BeginInvoke上的WPF到底是什么?

1 个答案:

答案 0 :(得分:4)

任务在TaskScheduler上运行。除了最常见的默认调度程序使用CLR线程池之外,调度程序可以执行任何操作。启动任务可能会启动新线程或重用现有线程。没有必要能够区分它们。

您可以使用TaskCreationOptions.LongRunning强制启动新主题。

await与此毫无关系。 await暂停执行当前方法,直到等待的“事物”完成。它永远不会开始,它只等待。

请注意,Task<int>.Run应为Task.Run。这两个表达式绑定到同一个方法(Task.Run),但前一个方法具有误导性。

Dispatcher.BeginInvoke与此无任何关系。您可以使用此方法来获取在WPF UI线程上运行的任意委托。