I assume that the only way to prevent the method from running simultaneously at the same time is to use the lock statement?
No, but this is the “standard” way and probably the best. In this case, a lock is usually used to synchronize access to specific data, and not to the method as a whole. Locking the entire method is likely to result in a larger lock than necessary.
, System.Threading , , ReaderWriterLockSlim, Semaphore, Mutex, Monitor class ( , lock ) .. , . lock - .