簡體   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