Здравствуйте,
Как правильно сделать синхронизацию удаление данных из списка `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);
}
}