在VS 2022社区(17.8.3版)中执行以下代码时:

using static System.Console;

Action action1 = new(() => WriteLine($"Executing {Task.CurrentId}"));
Action action2 = new(() => WriteLine($"Executing {Task.CurrentId}"));
Action action3 = new(() => WriteLine($"Executing {Task.CurrentId}"));
Parallel.Invoke(action1, action2, action3);

产生的输出是:

Executing 9
Executing 10
Executing 8

我明白身份是可以改变的.但我从来没有见过id从1开始.我的朋友们也这么说.他们还补充说,VS 2019中的相同代码能够在多次try 中生成1、2和3这样的ID. And here are the summarised observation:

1.VS2019-debug and release- You can see IDs 1,2,3 etc
2.VS 2022 release- Same observation.
3.VS2022-Debug- IDs start appearing as 8,9,10; 9,10,11 or 10,11,12 ,and so on…

我在https://developercommunity.visualstudio.com/t/Seems-like-TaskCurrentId-does-not-gener/10432547上发布了这个问题.按照建议,我开始调试代码,并发现由于此设置而创建了一些额外的任务ID.显然,当我在发布配置中运行代码时,不会创建这些额外的任务ID.但我想不出如何在VS2022中避免在调试模式下创建这些额外任务的过程. 以下是我的问题: 1.更改后的行为是预期行为吗? 2.在VS2022中,有什么简单的方法可以避免在调试模式下创建那些额外的任务?如果是这样的话,是如何做到的呢?

推荐答案

据我所知,这是由hot reload种功能造成的.

如果您将断点放在应用程序的开头并转到并行堆栈窗口(调试-&>Windows-&>;并行堆栈,切换到任务视图),您可以看到类似以下内容:

enter image description here

其中一些堆栈框架引用了Microsoft.Extensions.HotReload个命名空间中的内容.

您可以try 禁用热重新加载:转到项目属性->;调试->;打开调试启动配置文件UI->;取消选中启用热重新加载选项:

enter image description here

enter image description here

这将为我生成"正确的"任务ID.

Csharp相关问答推荐

Autofac:如何防止丢弃通过ServicCollection注册的服务?

如何将ref T*重新解释为ref nint?

如何修改中间件或其注册以正确使用作用域服务?

.NET 6控制台应用程序,RabbitMQ消费不工作时,它的程序文件中的S

实体框架核心中的ComplexType和OwnsOne有什么不同?

在静态模式下实例化配置

共享暂存/生产环境中Azure事件中心的建议配置

单行上的ReSharper数据标注

如何使用MoQ模拟Resources GroupCollection?

如何在C#中将方法/线程启动传递给基本构造函数

LINQ to Entities中的加权平均值

无法将生产环境的AppDbContext设置替换为用于集成测试的内存数据库

是否由DI容器自动处理由ActivatorUilties.CreateInstance()创建的服务?

源代码生成器项目使用`dotnet build`编译,而不是在Visual Studio中编译?

如何避免在.NET中将日志(log)写入相对路径

CRL已过期,但ChainStatus告诉我RevocationStatus未知

我找不到ASP.NET Web应用程序(.NET框架).已 Select .NET框架项目和项模板以及此组件(&Q;)

如何从Entity Framework Core中填充ListIInterface

SignalR跨域

为什么C#中的类型别名不能在另一个别名中使用?