[英]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.