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中没有一些框架特性。

Thread.Yield() in coreclr

您看到的是错误的文件,正确的文件在corefx存储库中。这个。

请注意,它是特殊的,它只包含声明。它是编译器使用的引用程序集。正如您所知,它没有Yield()方法,所以它是一个有保证的eek!来自编译器。在GAC中区分引用程序集和实现程序集是很久以前发生的事情,请查看Windows计算机上的C:''Program Files(x86)''reference Assemblys目录。

省略成员或类型的确切原因并不总是显而易见的。据我所见,起作用的因素有:

  1. CLR的.NETCore版本根本不支持该类型或成员。Silverlight最初是CLR的一个小版本,面向移动设备,易于下载,是该家族中最知名的成员。由于额外的小功能也使CLR更容易移植到另一个平台,.NETCore充当了CoreCLR的引导程序,因为让它在Linux和OSX上运行是一个强有力的目标。AppDomain就是一个很好的例子。

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

  3. .NET团队想对其进行抨击,CoreFx是一个极好的机会,可以减少一些枯木或追求新的最佳实践。有很多这样的例子,String.GetEnumerator()通常会让程序员感到困惑,我从一位团队成员那里听说它不够高效。像ArrayList这样过时的.NET1.x类更为明显。

我不知道Thread.Filder()为什么会失败,但它在CoreCLR实现中被大量使用(YieldProcessor和__SwitchToThread)的几率如此之高,以至于它符合项目符号3。微软一直在努力使其操作系统和框架对移动设备更友好,而在这种平台上,他们的竞争并不激烈。线程肯定不友好。

很有可能他们希望你改为使用Task.Ielder()。