了解线程以及与 .NET 和 WPF 的同步
Understanding Threads and Synchronization with .NET and WPF
我在 C++
编程多年,然后搬到 .NET
。到目前为止一切都更容易理解,但我仍然在与 同步 事情(理论上)作斗争。
我记得在 Whosebug 上看到 运行 宁 Task
实际上不会创建新线程!这让我很困惑。
异步任务如何在.NET
中完成运行?
你能解释一下原因吗
var value = await Task<int>.Run(() => { return 10; } );
不生成新线程?它的作用是什么?
此外,Dispatcher.BeginInvoke
在 WPF
上究竟是什么?
任务是 运行 TaskScheduler
秒。调度程序可以做任何事情,但最常见的默认调度程序使用 CLR 线程池。启动任务可能会启动一个新线程或重用现有线程。没必要分得清
您可以使用 TaskCreationOptions.LongRunning
.
强制启动新线程
await
与此完全无关。 await
暂停执行当前方法,直到等待的 "thing" 完成。它从不开始任何事情,它只是等待。
注意,Task<int>.Run
应该是 Task.Run
。这两个表达式绑定到相同的方法 (Task.Run
),但前一个具有误导性。
Dispatcher.BeginInvoke
与此无关。您可以使用此方法让任意委托成为 WPF UI 线程上的 运行。
我在 C++
编程多年,然后搬到 .NET
。到目前为止一切都更容易理解,但我仍然在与 同步 事情(理论上)作斗争。
我记得在 Whosebug 上看到 运行 宁 Task
实际上不会创建新线程!这让我很困惑。
异步任务如何在.NET
中完成运行?
你能解释一下原因吗
var value = await Task<int>.Run(() => { return 10; } );
不生成新线程?它的作用是什么?
此外,Dispatcher.BeginInvoke
在 WPF
上究竟是什么?
任务是 运行 TaskScheduler
秒。调度程序可以做任何事情,但最常见的默认调度程序使用 CLR 线程池。启动任务可能会启动一个新线程或重用现有线程。没必要分得清
您可以使用 TaskCreationOptions.LongRunning
.
await
与此完全无关。 await
暂停执行当前方法,直到等待的 "thing" 完成。它从不开始任何事情,它只是等待。
注意,Task<int>.Run
应该是 Task.Run
。这两个表达式绑定到相同的方法 (Task.Run
),但前一个具有误导性。
Dispatcher.BeginInvoke
与此无关。您可以使用此方法让任意委托成为 WPF UI 线程上的 运行。