안녕하세요?
항상 도움주셔서 감사합니다. 
아래와 같이 스레드와 스레드 안전한 객체를 사용할 때 
여러개의 스레드가 실행될 때 DoWork는 한번만 실행되는 것을 보장 받을 수 있을까요? 
//스레드 공용 static 변수
ConcurrentBag<string> cb = new ConcurrentBag<string>(); 
//아래 스레드는 여러개 실행
Task.Run(() =>
{
    
    if(!cb.Contains("Completed"))
    {
        cb.Add("Completed");
        //DoWork(스레드에 대해서 한번만 작업)
    }
});
아니면 아래와 같이 lock(this) 동기화 객체같은걸로 동기화를 해야할까요?
Task.Run(() =>
{
    lock(this){    
    if(!cb.Contains("Completed"))
    {
        cb.Add("Completed");
        //DoWork(스레드에 대해서 한번만 작업)
    }
    }
});
아니면 DoWork작업을 다중스레드에서 한번만 실행할 수 있는 다른 좋은 방법이 있는지 궁금합니다. 
감사합니다. 
        
        
                    
                    
                    
                    
                    
    
                    
                    
                    
                    
                    
                
                    [최초 등록일: ]
                    [최종 수정일: 9/19/2022]