Thread.Yield() in coreclr
本文关键字:in coreclr Yield Thread | 更新日期: 2024-09-25 12:43:36
在.NET中,线程类具有静态方法Yield
我在Thread的coreclr实现中看到了这种方法
但是文档中并没有包含方法描述
此外,.NET CLI(dotnet build)无法使用该方法调用编译代码
为什么?
更新
运行时:1.0.0-rc1-update1 coreclr x64 darwin
项目.json
{
"version": "1.0.0-*",
"compilationOptions":
{
"emitEntryPoint": true
},
"dependencies":
{
"NETStandard.Library": "1.0.0-rc2-*",
"System.Threading": "4.0.11-rc3-*"
},
"frameworks": {
"dnxcore50": {}
}
}
upd2
我不打算使用Thread.Filder()
我只是想知道为什么coreclr中没有一些框架特性。
您看到的是错误的文件,正确的文件在corefx存储库中。这个。
请注意,它是特殊的,它只包含声明。它是编译器使用的引用程序集。正如您所知,它没有Yield()方法,所以它是一个有保证的eek!来自编译器。在GAC中区分引用程序集和实现程序集是很久以前发生的事情,请查看Windows计算机上的C:''Program Files(x86)''reference Assemblys目录。
省略成员或类型的确切原因并不总是显而易见的。据我所见,起作用的因素有:
-
CLR的.NETCore版本根本不支持该类型或成员。Silverlight最初是CLR的一个小版本,面向移动设备,易于下载,是该家族中最知名的成员。由于额外的小功能也使CLR更容易移植到另一个平台,.NETCore充当了CoreCLR的引导程序,因为让它在Linux和OSX上运行是一个强有力的目标。AppDomain就是一个很好的例子。
-
它可能还没有在每个操作系统上实现,或者它在错误的.NETStandard配置文件中。将它排除在引用程序集中是一种非常简单的方法,可以防止程序意外使用它并触发可能非常难以诊断的运行时异常。
-
.NET团队想对其进行抨击,CoreFx是一个极好的机会,可以减少一些枯木或追求新的最佳实践。有很多这样的例子,String.GetEnumerator()通常会让程序员感到困惑,我从一位团队成员那里听说它不够高效。像ArrayList这样过时的.NET1.x类更为明显。
我不知道Thread.Filder()为什么会失败,但它在CoreCLR实现中被大量使用(YieldProcessor和__SwitchToThread)的几率如此之高,以至于它符合项目符号3。微软一直在努力使其操作系统和框架对移动设备更友好,而在这种平台上,他们的竞争并不激烈。线程肯定不友好。
很有可能他们希望你改为使用Task.Ielder()。