Size: a a a

2021 March 21

Dv

Dr. Friedrich von Ne... in pro.net
Не проебав нужные части
источник

Dv

Dr. Friedrich von Ne... in pro.net
Ну и потом его отправив по нужному пайплайну
источник

DP

Denis Petukhov in pro.net
Dr. Friedrich von Never
Но вся логика — это принять жесон и правильно десериализовать, ну например
Проверка десериализации не требует хттп
источник

Dv

Dr. Friedrich von Ne... in pro.net
Ну то есть, нет смысла это тестить в отрыве от данных
источник

Dv

Dr. Friedrich von Ne... in pro.net
Denis Petukhov
Проверка десериализации не требует хттп
Лонг поллинг как ты протестируешь?
источник

Dv

Dr. Friedrich von Ne... in pro.net
Я без шуток, хочешь — пойди и протестируй, жду пул-реквестов :)
источник

Dv

Dr. Friedrich von Ne... in pro.net
источник

DP

Denis Petukhov in pro.net
Пока не приходилось)
источник

Dv

Dr. Friedrich von Ne... in pro.net
Вот тут я и узнал, кстати, что Reactive отлично интегрируется с тасками.
источник

D

Denisio in pro.net
matrix это такой jabber 2.0? :)
источник

Dv

Dr. Friedrich von Ne... in pro.net
Denisio
matrix это такой jabber 2.0? :)
Вроде того.
источник

E

EgorBo in pro.net
сразу вспомнил _vt, жаль его тут нет
источник

Dv

Dr. Friedrich von Ne... in pro.net
EgorBo
сразу вспомнил _vt, жаль его тут нет
Это и к лучшему, что его тут нет.
источник

Dv

Dr. Friedrich von Ne... in pro.net
Некоторым вещам лучше бы оставаться в чулане.
источник

G

Gradi in pro.net
Добрый день. Вопрос про асинхронщину.
Кеширование объекта Task<T>. Насколько это плохая идея?
Пример,
Надо сходить в базу и достать по Id что-то и результат положить в кеш.

private readonly ConcurrentDictionary<int, object> _cache1 = new();
private readonly ConcurrentDictionary<int, Task<object>> _cache2 = new();

public async Task<object> GetByIdAsync1(int id)
{
   if (!_cache.TryGetValue(id, out var value)
   {
       value = await _db.GetByIdAsync(id);
       _cache1.Add(id, value);
   }
   return value;
}

public Task<object> GetByIdAsync2(int id) =>
   _cache2.GetOrAdd(id, _db.GetByIdAsync);

Какой метод лучше/хуже?

Во втором случае, когда будем *второй* и последующие разы доставать тот же объект, таска уже будет отработана и она будет просто возвращать один и тот же результат(как я понимаю).
источник

AK

Andrei Kurosh in pro.net
Gradi
Добрый день. Вопрос про асинхронщину.
Кеширование объекта Task<T>. Насколько это плохая идея?
Пример,
Надо сходить в базу и достать по Id что-то и результат положить в кеш.

private readonly ConcurrentDictionary<int, object> _cache1 = new();
private readonly ConcurrentDictionary<int, Task<object>> _cache2 = new();

public async Task<object> GetByIdAsync1(int id)
{
   if (!_cache.TryGetValue(id, out var value)
   {
       value = await _db.GetByIdAsync(id);
       _cache1.Add(id, value);
   }
   return value;
}

public Task<object> GetByIdAsync2(int id) =>
   _cache2.GetOrAdd(id, _db.GetByIdAsync);

Какой метод лучше/хуже?

Во втором случае, когда будем *второй* и последующие разы доставать тот же объект, таска уже будет отработана и она будет просто возвращать один и тот же результат(как я понимаю).
Нормальная идея, асинк + ConcurrentDictionary примерно так и работает. Однако твой второй вариант не сможет нормально обработать исключение
источник

AK

Andrei Kurosh in pro.net
Переслано от IdiocyAcceptance
источник

AK

Andrei Kurosh in pro.net
Там есть ссылка на гист с правильной реализацией
источник

G

Gradi in pro.net
Andrei Kurosh
Нормальная идея, асинк + ConcurrentDictionary примерно так и работает. Однако твой второй вариант не сможет нормально обработать исключение
Но тот кто сверху будет await'ить получит исключение в обоих случаях.
источник

AK

Andrei Kurosh in pro.net
Gradi
Но тот кто сверху будет await'ить получит исключение в обоих случаях.
А ты уверен, что если будет исключение, то ты хочешь закешировать упавший таск, а не дать следующему запросу попробовать еще раз?
источник