Re: Синхронизация данных
От: Egorio Россия  
Дата: 05.03.19 13:41
Оценка: -1
Здравствуйте, #John, Вы писали:

J>Здравствуйте,


J>Как правильно сделать синхронизацию удаление данных из списка `list` в строчке `list.RemoveAt(id)` , что бы удалился правильный `id`.

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

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

J>
J>class B{
J>    Task Main(){
J>       var a=new A();
J>       var tasks=new List<Task>{a.func(), a.func()}
J>       Task.WhenAll(tasks);
J>    }    
J>} 
J>


Параметр RemoveAt(Int32 i) типа int. Вот и объявите id как int, а не как var
В чем собственно проблема?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.