Обновить
42
0
Igor Chakrygin@Ordos

.NET Developer

Отправить сообщение
Давно интересует такой вопрос, часто вижу код вроде этого:
public async Task<SomeResult> FooAsync()
{
    return await BarAsync();
}


Есть ли какие-то веские причины не переписать его просто так:
public Task<SomeResult> FooAsync()
{
    return BarAsync();
}

т.е. сразу вернуть задачу из метода, без вызова await.

Просто нигде внятного объяснения не могу найти, может кто-то сможет объяснить?
Однако, в них есть кое-что беспокоящее меня: оба эти метода очень неэффективны, если они не знают количество элементов в последовательности

Как раз они знают про количество, т.к. эти методы в конечном итоге проверяют, а не реализует ли параметр IEnumerable[T] ещё и ICollection[T]. А если это так используют его свойство Count и метод CopyTo. (Что уж точно будет быстрее, чем вызывать Add в цикле)
Интересно, спасибо.
Только, если не ошибаюсь, Ldind_i4 загружает значение на стек с указанного в параметре адреса. Константы загружают инструкции Ldc.
Кстати, всегда было интересно, есть ли разница в скорости инструкций ldc.i4.5, ldc.i4.s 5 и ldc.i4 5. Или разница только в размере кода. (Пробовал измерять, короткие формы вроде чуть быстрее, но не уверен в правильности измерения)
По ссылке «Создание веб-API в MVC 6» есть скриншот Solution Explorer. Там видно, что в проекте помимо References появился элемент Dependencies. Может кто-нибудь знает, что это такое? Ну и wwwroot заодно. Просто любопытно =)
Первый пункт интересный, никогда об этом не задумывался. Получается, что та же самая проблема будет при использовании ConcurrentDictionary с ключём-строкой?

А вот по поводу последнего пункта, мне кажется там ошибка. В таком случае делегат всё равно будет создаваться каждый раз. Правильнее будет

if(_fooAction == null)
    _fooAction = Foo;

Execute(_fooAction);

Кстати говоря, если написать Execute(() => Foo()); то компилятор сам сгенерирует статическое поле. Странно, почему он не делает этого всегда.
Можно немного подробнее про _source и store? Я не очень понял, в чём между ними разница. Насколько я помню, даже если мы храним весь _source, то можем сказать, что «вытащи мне только определённые поля из _source». Как я понял, store делает тоже самое. В чём разница между ними? Когда что лучше использовать?

И ещё немного не по теме вопрос, насколько «умный» анализатор в ES для русского и английских языков? Другими словами в какую нормальную форму он приводит слова? (Если сравнивать со Sphinx, где есть стеммер, который просто обрезает окончания, и лемматайзер, который при нормализации приводит слово в правильную нормальную форму.)
Да, видимо в этом случае действительно только по id группироваться. Получается сами значения нужно вытаскивать из другого источника данных и это нормальная практика для ES?
Просто странно, что нет простого способа сгруппироваться по самому значению, хотя в самом ES оно хранится. Видимо отсюда следует, что вместе с каждой группой нельзя вытащить дополнительные поля. (Что-то вроде select foo_id, foo_name from bar group by foo_id — группировка только по id, а вытаскиваем ещё и name)
Спасибо! Как раз недавно начал смотреть ES для разнообразия.
У меня вопрос по terms aggregation. Когда я пробовал его использовать, он группировал документы не по значениям поля, а по словам в нем. Хотя, как мне кажется, чаще нужно именно первое. Где-то видел рекомендацию отключать анализ этого поля, но как тогда по нему искать… Как правильнее поступать в такой ситуации?
Как по мне, то, что некий абстрактный Jitter может принять абстрактное решение создавать все локальные переменные в куче не смотря на потерю производительности — это сферический конь в вакууме.

Лично для меня определение, что «значимые типы — это типы, экземпляры которых располагаются на стеке, а ссылочные — это типы, экземпляры которых располагаются в куче» вполне приемлемо. Просто оно неявно подразумевает, что речь идёт о локальных переменных.

И как иначе определять значимые типы? Что они по значению передаются? Ну так они и по ссылке могут передаваться.
Возможно, что это будет работать как «Lightweight dynamic member access»
roslyn.codeplex.com/discussions/540574
payload.$city = "Duckburg"; // ((dynamic) payload).city = "Duckburg"
Ой, нет, не обсуждается =(
Это дискуссии, а не документация…
Maybe, и синтаксис какой-то странный (с обратным слешем).
var message = "Hello, \{name}!"

Или это только мне так кажется?

Зато обсуждается метапрограммирование!
roslyn.codeplex.com/discussions/541131
Я так понял, что это полный аналог обычного индексатора.
roslyn.codeplex.com/discussions/540569

var payload = new JsonObject
{
    ["first name"] = "Donald",
    ["last name"] = "Duck",
    $city = "Duckburg" // equivalent to ["city"] = "Duckburg"
};
Ух, кажется в документации даже есть полный список новых возможностей C#
roslyn.codeplex.com/wikipage?title=Language%20Feature%20Status&referringTitle=Documentation

Количество со статусом Done и Planned радует =)
А пример №8 всё же можно заставить компилироваться, лямбды поддерживают ref и out параметры.

Нужно объявить свой тип делегата:
public delegate void ActionWithRef(ref int value);

А потом объявить делегат, явно указав ref и тип параметра:
ActionWithRef action = (ref int value) => { i = i++; };
Я тоже недавно наткнулся на некоторые возможности C# и .Net про которые раньше вообще не слышал. Надеюсь, никто не будет против, если поделюсь одной из них =)

Eсть в солюшене есть три проекта:

ClassLibrary1:
namespace Foo {
	public static class Bar {
		public static void Do() {
			System.Console.WriteLine("ClassLibrary1");
		}
	}
}


ClassLibrary2:
namespace Foo {
	public static class Bar {
		public static void Do() {
			System.Console.WriteLine("ClassLibrary2");
		}
	}
}


И ещё консольное приложение, которое ссылается на оба проекта. Как в методе Main этого приложения вызвать оба метода без рефлексии?

Ответ
В проекте консольного приложения свойствах ссылок на другие проекты можно назначить алиасы ClassLibrary1 и ClassLibrary2. После этого такой код будет компилироваться:
extern alias ClassLibrary1;
extern alias ClassLibrary2;

public class Program {
	public static void Main() {
		ClassLibrary1.Foo.Bar.Do();
		ClassLibrary2.Foo.Bar.Do();
	}
}

Пробовал, было неудобно. Во-первых, пересылка с небольшой задержкой происходит. А во-вторых, если надо почистить почтовый ящик, то придётся чистить оба.
К счастью пользуюсь расширением для браузера, которое с пдд работать умеет и уведомляет о письмах. Но всё же было бы приятнее заходить на главную яндекса и видеть в виджете от почты именно новые письма из пдд.
А будет ли в перспективе возможность, чтобы почтовый ящик в ПДД мог быть алиасом для основной почты?
Например, у меня аккаунт на яндексе имя-фамилия@ yandex.ru и почта для домена имя@фамилия.ru. Хотелось авторизовавшись через первый адрес фактически пользоваться именно ПДД, т.е. чтобы там же был и яндекс.диск, и почта отправлялась со второго адреса и всё остальное.
Грустный, потому что очень хочу =)

А вообще ведь классная идея. Мы иногда делаем рутинные операции, и нам лень посмотреть, а нет ли уже какого-нибудь хоткея для этого. У меня стоит IntelliCommand (http://visualstudiogallery.msdn.microsoft.com/83f59659-abc1-4bfa-9779-42f687af0481), но я редко им пользуюсь.

А можно пойти ещё дальше! Плагин первые 10-20 раз напоминает: «А вот это действие можно было сделать быстрее», а потом начинает откатывать твои действия: «Нет, это действие можно было сделать проще. Вот так. Попробуй ещё разок» =)
Я теперь хочу такой же плагин в ReSharper =(

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность