coreclr中的Thread.Yield()

mif*_*mif 6 .net c# multithreading 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": {}
    }
}
Run Code Online (Sandbox Code Playgroud)

upd2
我不会使用Thread.Yield();
我只是想知道为什么coreclr中缺少某些框架功能.

Han*_*ant 5

您正在查看错误的文件,正确的文件位于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()代替.