Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 了解线程和与.NET和WPF的同步_C#_Wpf_Asynchronous_Task - Fatal编程技术网

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

C# 了解线程和与.NET和WPF的同步,c#,wpf,asynchronous,task,C#,Wpf,Asynchronous,Task,我已经在C++编程多年了,然后转到.NET。到目前为止,一切都更容易理解,但我仍在努力解决同步问题(理论上) 我记得在这里看到的Stackoverflow中,运行任务实际上不会创建新线程!这让我很困惑 异步任务如何在.NET中运行 你能解释一下原因吗 var value = await Task<int>.Run(() => { return 10; } ); var value=wait Task.Run(()=>{return 10;}); 不会产生新线程吗?它的作用是

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

我记得在这里看到的Stackoverflow中,运行
任务
实际上不会创建新线程!这让我很困惑

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

你能解释一下原因吗

var value = await Task<int>.Run(() => { return 10; } );
var value=wait Task.Run(()=>{return 10;});
不会产生新线程吗?它的作用是什么


另外,在
WPF
Dispatcher.BeginInvoke
具体是什么?

任务在
TaskScheduler
s上运行。调度程序可以执行任何操作,但最常见的默认调度程序使用CLR线程池。启动任务可能会启动新线程或重用现有线程。没有必要分辨出区别

您可以使用
TaskCreationOptions.LongRunning
强制启动新线程

wait
与此无关<代码>等待暂停当前方法的执行,直到等待的“事情”完成。它从不开始,它只是等待

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


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

您可以在.NET中创建线程(就像使用C++),如果需要,您可以强制
任务
-s在单独的线程上运行。不是答案,只是让您知道(如果您不是:)。任务是在线程池上执行的。他们可能需要也可能不需要专用于他们的新线程。如果你真的想要一个新的线程,你可以使用
thread
class.Ok。但我如何知道任务何时在线程池上运行,何时不在线程池上运行?那么线程池在.NET上是如何工作的呢?@AlexandreSeverino.NET和所有这些高级语言将所有东西都“隐藏”起来,最终使所有东西都变得简单易用,以至于理解“背后到底发生了什么”变得复杂。亲切的问候,这是真的。我有时发现从实现细节的角度理解系统比只看保证更容易。