这是一个简单的WinForms应用程序:
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private async void button1_Click(object sender, EventArgs e)
{
var ts = TaskScheduler.FromCurrentSynchronizationContext();
await Task.Factory.StartNew(async () =>
{
Debug.WriteLine(new
{
where = "1) before await",
currentTs = TaskScheduler.Current,
thread = Thread.CurrentThread.ManagedThreadId,
context = SynchronizationContext.Current
});
await Task.Yield(); // or await Task.Delay(1)
Debug.WriteLine(new
{
where = "2) after await",
currentTs = TaskScheduler.Current,
thread = Thread.CurrentThread.ManagedThreadId,
context …Run Code Online (Sandbox Code Playgroud) 在.Net进程中,只有一个托管线程池。我们可以根据需要通过公共属性设置最小和最大线程数。
在.Net 中,我们还可以Parallel.ForEach从后台的托管线程池中获取线程。
我们Parallel.ForEach还可以设置MaxDegreeOfParallelism限制最大线程数。
我有两个Parallel.ForEach并行运行。一个MaxDegreeOfParallelism设置为 3,另一个设置为 7。
我的问题是:我的两个Parallel.ForEach循环是否在幕后使用相同的线程池。如果是,如何Parallel.ForEach限制线程MaxDegreeOfParallelism。多个
Parallel.ForEach循环和一个托管线程池如何协同工作?如果您能在我深入了解 .net core 源代码之前提供高级解释或一些指示,那将会非常有帮助。
.net c# multithreading task-parallel-library parallel.foreach