Здравствуйте, hi_octane, Вы писали:
B>>Какие проблемы конечного пользователя решают ваши волшебные макросы?
_>Ну вот пример — прямо сейчас async/await не совместим с lock в C#. Вообще. Т.е. методы содержащие lock() { ... await ... } не будут компилироваться. Имея макросы, ты бы мог решить эту проблему десятком способов, например взять с гугла любой AsyncMutex, сделать свой lock принимающий этот AsyncMutex, и всё готово. Оставаясь на C# ты просто ждёшь, непонятно чего, так как эта фича пока даже не заявлена в C#6, и неизвестно будет ли вообще когда-то заявлена. Как C# решает проблему того что async/await есть, а внятной синхронизации нет? using(IDispoableAsyncMutex)? try{ await AsyncMutex } finnaly { AsyncMutext.Release() } ? Использовать scheduler-обёртку над защищаемым объектом, и стартовать таски в нём? Методы один хуже другого, и все дико не наглядные, тупо мешающие читать код, по сравнению с lock().
Async/await вроде бы сделан специально для высокоуровневых вещей, где явная синхронизация не нужна, не? Ладно, допустим я ошибаюсь, проведем мысленный эксперимент — опрос среди пользователей C#: нужна ли вам поддержка lock() в асинхронных методах? С 3мя вариантами: нужна в ежедневных задачах, нужна была пару раз, ни разу не сталкивался с необходимостью. Как думаете, наберет первый вариант больше 1%?