相关疑难解决方法(0)

了解TaskScheduler.Current的行为

这是一个简单的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 c# task-parallel-library async-await

12
推荐指数
1
解决办法
3063
查看次数

.Net 中的多个 Parallel.ForEach 循环

在.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

5
推荐指数
1
解决办法
2194
查看次数