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

Understanding Threads and Synchronization with .NET and WPF

我在 C++ 编程多年,然后搬到 .NET。到目前为止一切都更容易理解,但我仍然在与 同步 事情(理论上)作斗争。

我记得在 Whosebug 上看到 运行 宁 Task 实际上不会创建新线程!这让我很困惑。

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

你能解释一下原因吗

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

不生成新线程?它的作用是什么?

此外,Dispatcher.BeginInvokeWPF 上究竟是什么?

任务是 运行 TaskScheduler 秒。调度程序可以做任何事情,但最常见的默认调度程序使用 CLR 线程池。启动任务可能会启动一个新线程或重用现有线程。没必要分得清

您可以使用 TaskCreationOptions.LongRunning.

强制启动新线程

await 与此完全无关。 await 暂停执行当前方法,直到等待的 "thing" 完成。它从不开始任何事情,它只是等待。

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

Dispatcher.BeginInvoke 与此无关。您可以使用此方法让任意委托成为 WPF UI 线程上的 运行。