gpt4 book ai didi

c# - coreclr 中的 Thread.Yield()

转载 作者:太空狗 更新时间:2023-10-29 21:38:24 25 4
gpt4 key购买 nike

在 .NET Thread 类中有静态方法 Yield。
我在 coreclr implementation of Thread 中看到了那个方法.
但是documentation不包含该方法描述。
.NET CLI(dotnet 构建)也无法使用该方法调用编译代码。
为什么?

更新
运行: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.Yield();
我只是想知道为什么 coreclr 中缺少某些框架功能。

最佳答案

您看错了文件,正确的文件在 corefx 存储库中。 This one .

注意它比较特殊,它只包含声明。它是引用程序集,您的编译器使用的程序集。正如您所知道的,它没有 Yield() 方法,所以可以保证!来自编译器。在 GAC 中区分引用程序集和实现程序集是很久以前的事情了,看看 Windows 机器上的 C:\Program Files (x86)\Reference Assemblies 目录。

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

  1. CLR 的 .NETCore 版本根本不支持该类型或成员。 Silverlight 最初设计为针对移动设备且易于下载的 CLR 的小型版本,是该家族中最知名的成员。由于小的附加功能还可以更轻松地将 CLR 移植到另一个平台,.NETCore 充当了 CoreCLR 的 Bootstrap ,因为让它在 Linux 和 OSX 上运行是一个强烈的目标。 AppDomain 就是一个很好的例子。

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

  3. .NET 团队想要弃用它,CoreFx 是一个绝好的机会,可以砍掉一些废柴或追求新的最佳实践。很多这样的例子,String.GetEnumerator() 是一个通常难倒程序员的例子,我从一个团队成员那里听到的理由是它不够有效。 ArrayList 等过时的 .NET 1.x 类更为明显。

我不能确定为什么 Thread.Yield() 会掉到地上,但它在 CoreCLR 实现(YieldProcessor 和 __SwitchToThread)中被大量使用,所以它符合第 3 条的可能性很高。微软一直在努力使他们的操作系统和框架对移动设备更友好,这种平台他们没有很好地竞争过。线程绝对不友好。

很有可能他们希望您改用 Task.Yield()。

关于c# - coreclr 中的 Thread.Yield(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36673628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com