2016-04-17 7 views
6

В .NET Класс Thread имеет статический метод. Выход.
Я вижу этот метод в coreclr implementation of Thread.
Но documentation не содержит этого описания метода.
Также .NET CLI (dotnet build) не может компилировать код с помощью этого метода.
Почему?Thread.Yield() in coreclr

обн
выполнения: 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.

+0

Это зависит от того, какая платформа, какая платформа, как настроен ваш проект. Можете ли вы предоставить образец кода и project.json, который вы использовали? –

+1

Я собираюсь немного подойти - почему, по-вашему, вам нужно использовать 'Thread.Yield'? Я уверен, что есть лучший способ сделать то, что вы делаете, чем использовать «Thread.Yield», особенно когда вы нацеливаете на coreCLR. – Luaan

+0

Fabien, я отредактировал вопрос – mif

ответ

5

Вы ищете неправильный файл, правильный в хранилище corefx. This one.

Обратите внимание, что это специальный, он содержит только декларации. Это базовый блок , который используется вашим компилятором. Как вы можете сказать, у него нет метода Yield(), поэтому гарантированный eek! из компилятора. Отличие сборки ссылок от сборки реализации в GAC - это то, что произошло давно, посмотрите на каталог C: \ Program Files (x86) \ Reference Assemblies на компьютере под управлением Windows.

Точные причины, по которым элемент или тип опущены, не всегда очевидны. Из того, что я видел, факторы, которые играют роль, являются:

  1. Тип или элемент просто не поддерживается версией .NETCore в CLR. Первоначально разработанная как небольшая версия CLR, предназначенная для мобильных устройств и легко загружаемая, Silverlight является самым узнаваемым членом этого семейства. Благодаря дополнительной функции, которая мала также упрощает перенос CLR на другую платформу, .NETCore служил загрузочной машиной CoreCLR, поскольку она запускалась на Linux, а OSX была сильной целью. AppDomain - хороший пример.

  2. Возможно, он еще не реализован в каждой ОС или он не соответствует профилю .NETStandard. Сохранение его из ссылочной сборки - очень простой способ предотвратить случайное использование программы и вызвать, возможно, очень трудную диагностику исключения времени выполнения.

  3. Команда .NET хотела отказаться от этого, CoreFx - это потрясающая возможность вырезать мертвую древесину или преследовать новую передовую практику. Множество примеров этого, String.GetEnumerator() - это тот, который обычно пьет программистов, оправдание, которое я слышал от члена команды, что он недостаточно эффективен. Устаревшие классы .NET 1.x, такие как ArrayList, более очевидны.

Я не могу быть уверен, почему Thread.yield() упал на пол, но он широко используется в реализации CoreCLR (YieldProcessor и __SwitchToThread) настолько высока вероятность того, что она соответствует пуля 3. Microsoft была упорствуя, чтобы сделать их операционные системы и фреймворки более дружественными к мобильным устройствам, платформу, на которой они не очень хорошо конкурировали. Темы определенно не дружелюбны.

Хорошие шансы, что они хотят, чтобы вы использовали Задачу.Выход() вместо.

 Смежные вопросы

  • Нет связанных вопросов^_^