Здравствуйте, #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
В чем собственно проблема?