Size: a a a

Microsoft Developer Community Chat

2018 April 18

AI

Arthur Irgashev in Microsoft Developer Community Chat
т.е. эффект такой же
источник

AI

Aλex I.m2strng4dtwrld in Microsoft Developer Community Chat
Ты читал о том, как анутри работает лок и await?
источник

AI

Arthur Irgashev in Microsoft Developer Community Chat
что-то вроде Monitor.TryEnter() try {} finally {Monitor.exti()}
источник

G

Gopneg in Microsoft Developer Community Chat
Arthur Irgashev
т.е. эффект такой же
какой такой же? монитор по объекту, а семафор сам по себе счетчик
источник

AI

Arthur Irgashev in Microsoft Developer Community Chat
ну так ты используй перед доступом к обжекту
источник

AI

Arthur Irgashev in Microsoft Developer Community Chat
или у тебя именно вообще из другого участка можно обратиться ?
источник

G

Gopneg in Microsoft Developer Community Chat
ну вот смари, у меня стопицот потоков вызывают метод с ключиком, внутри метода получаем из дикшионари обжект
проверяем всякое по объекту, если надо - обновляем
если я сделаю семафор, то у меня будут ждать все 100500 потоков
а если сделаю лок то только те, которые этот объект хотят
источник

G

Gopneg in Microsoft Developer Community Chat
вот вореанта у меня сейчас два, либо сделать
var val = Task.Run<J>(async () => await GetFreshValueAsync(controller, key)).Result;
либо асунки убрать отсюда ваще из всей цепочки
источник

AI

Arthur Irgashev in Microsoft Developer Community Chat
чёт ты муть какую-то нагородил :)
источник

G

Gopneg in Microsoft Developer Community Chat
канеш. асунки везде напихал %)
думаю теперь убрать нахер и не парить мозг %))
источник

AI

Arthur Irgashev in Microsoft Developer Community Chat
тебе именно дикшнари залочить нужно ?
источник

G

Gopneg in Microsoft Developer Community Chat
нет, велью из него
источник

G

Gopneg in Microsoft Developer Community Chat
дикшоионари у меня и так конкурентное, с ним все пучкомъ
источник

G

Gopneg in Microsoft Developer Community Chat
    public virtual async Task<J> GetValueAsync(C controller, K key, bool forceFresh = false)
   {
     BotStat.Instance.IncValue($"{nameof(GetValueAsync)}:{typeof(J).Name}");

     var value = Data.GetOrAdd(key, GetNew());

     lock (value)
     {
       if (value.IsValid && !forceFresh)
         return value.GetData();
       else
       {          
         var val = Task.Run<J>(async () => await GetFreshValueAsync(controller, key)).Result;
         value.SetData(val);        
         return value.GetData();
       }
     }
   }
источник

AI

Arthur Irgashev in Microsoft Developer Community Chat
убирай из него асинки, слишком сложно выглядит
источник

G

Gopneg in Microsoft Developer Community Chat
вот завтра сделают лок авейт и обратно вставлять!
источник

AI

Arthur Irgashev in Microsoft Developer Community Chat
а вообще тут и семафором обойтись можно
источник

G

Gopneg in Microsoft Developer Community Chat
семафор будет блочить всех жэ! а мне тока тех кому этот велью
источник

AI

Arthur Irgashev in Microsoft Developer Community Chat
вместо lock (value) делаешь await WaitAsync()
источник

AI

Arthur Irgashev in Microsoft Developer Community Chat
ну так они ж все возьмут этот вэлью
источник