[英]Thread.Yield() in coreclr
在.NET Thread类中有静态方法Yield。
我在Thread的coreclr实现中看到了这个方法。
但是文档不包含Method描述。
此外,.NET CLI(dotnet build)无法使用该方法调用编译代码。
为什么?
UPD
运行时: 1.0.0-rc1-update1 coreclr x64 darwin
project.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.Yield();
我只是想知道为什么coreclr中缺少某些框架功能。
您正在查看错误的文件,正确的文件位于corefx存储库中。 这个 。
请注意,它是特殊的,它只包含声明。 它是引用程序集 ,是编译器使用的程序集。 你可以告诉它,它没有Yield()方法所以保证eek! 来自编译器。 将参考程序集与GAC中的实现程序集区分开来是很久以前发生的事情,请查看Windows计算机上的C:\\ Program Files(x86)\\ Reference Assemblies目录。
省略成员或类型的确切原因并不总是显而易见的。 从我所看到的,发挥作用的因素是:
CLR的.NETCore版本根本不支持类型或成员。 Silverlight最初设计为针对移动设备的小型CLR,易于下载,是该系列中最知名的成员。 由于使用较小的附加功能也可以更轻松地将CLR移植到另一个平台,因此.NETCore可以作为CoreCLR的引导程序,因为它可以在Linux和OSX上运行,这是一个强大的目标。 AppDomain就是一个很好的例子。
它可能尚未在每个操作系统上实现,或者它位于错误的.NETStandard配置文件中。 将其保留在引用程序集之外是一种非常简单的方法,可以防止程序意外使用它并触发可能非常难以诊断的运行时异常。
.NET团队想要弃用它,CoreFx是削减一些死木或追求新的最佳实践的绝佳机会。 很多这样的例子,String.GetEnumerator()通常会让程序员难以接受,我从团队成员那里听到的理由是它不够高效。 像ArrayList这样过时的.NET 1.x类更为明显。
我不能确定为什么Thread.Yield()落在了地板上,但它在CoreCLR实现(YieldProcessor和__SwitchToThread)中使用得很多,因此很有可能它适合子弹3.微软一直在努力制造他们的操作系统和框架对移动设备更友好,这是一种他们没有很好竞争的平台。 线程绝对不友好。
很有可能他们希望你使用Task.Yield()代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.