繁体   English   中英

coreclr中的Thread.Yield()

[英]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目录。

省略成员或类型的确切原因并不总是显而易见的。 从我所看到的,发挥作用的因素是:

  1. CLR的.NETCore版本根本不支持类型或成员。 Silverlight最初设计为针对移动设备的小型CLR,易于下载,是该系列中最知名的成员。 由于使用较小的附加功能也可以更轻松地将CLR移植到另一个平台,因此.NETCore可以作为CoreCLR的引导程序,因为它可以在Linux和OSX上运行,这是一个强大的目标。 AppDomain就是一个很好的例子。

  2. 它可能尚未在每个操作系统上实现,或者它位于错误的.NETStandard配置文件中。 将其保留在引用程序集之外是一种非常简单的方法,可以防止程序意外使用它并触发可能非常难以诊断的运行时异常。

  3. .NET团队想要弃用它,CoreFx是削减一些死木或追求新的最佳实践的绝佳机会。 很多这样的例子,String.GetEnumerator()通常会让程序员难以接受,我从团队成员那里听到的理由是它不够高效。 像ArrayList这样过时的.NET 1.x类更为明显。

我不能确定为什么Thread.Yield()落在了地板上,但它在CoreCLR实现(YieldProcessor和__SwitchToThread)中使用得很多,因此很有可能它适合子弹3.微软一直在努力制造他们的操作系统和框架对移动设备更友好,这是一种他们没有很好竞争的平台。 线程绝对不友好。

很有可能他们希望你使用Task.Yield()代替。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM