Синхронизация данных
От: #John Европа https://github.com/ichensky
Дата: 05.03.19 13:19
Оценка:
Здравствуйте,

Как правильно сделать синхронизацию удаление данных из списка `list` в строчке `list.RemoveAt(id)` , что бы удалился правильный `id`.
lock вешать на всю функцию `func` не вариант, потому что она должна выполнятся паралельно в нескольких задачах.
class A{
    Random random=new Random();
    List<int> list=new List<int>{1,2,3,4,5};

    public async Task func(){
        var id = list[random.Next(0,list.Count)];
        try{
            //... do some stuff
            await OtherLib.Method(id);  
        }
        catch(Exception ex){
            if(ex.Message ...){
               list.RemoveAt(id);
            }
        }
    }
}

class B{
    Task Main(){
       var a=new A();
       var tasks=new List<Task>{a.func(), a.func()}
       Task.WhenAll(tasks);
    }    
}
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.