C# ASP.NET-不同线程写入同一文件导致问题

C# ASP.NET-不同线程写入同一文件导致问题,c#,asp.net,locking,C#,Asp.net,Locking,我有一个执行删除和创建文件的方法。所有线程都试图同时访问该文件时出现问题 如何限制对该文件的访问 public static Save(string file) { //1.Perform Delete //2.Perform Write } 请注意,该方法是静态的,因此是否可以在静态方法中锁定进程 干杯 或者您可以使用在整个方法体周围放置一个锁的: [MethodImpl(MethodImplOptions.Synchronized)] public static void Sav

我有一个执行删除和创建文件的方法。所有线程都试图同时访问该文件时出现问题

如何限制对该文件的访问

public static Save(string file)
{
  //1.Perform Delete
  //2.Perform Write 
}
请注意,该方法是静态的,因此是否可以在静态方法中锁定进程

干杯

或者您可以使用在整个方法体周围放置一个
锁的:

[MethodImpl(MethodImplOptions.Synchronized)]
public static void Save(string file)
{
    //1.Perform Delete
    //2.Perform Write 
}
或者您可以使用在整个方法体周围放置一个
锁的:

[MethodImpl(MethodImplOptions.Synchronized)]
public static void Save(string file)
{
    //1.Perform Delete
    //2.Perform Write 
}

您必须在静态对象上使用锁

private static Object saveLock = new Object();

public static Save(string file)
{
   lock (saveLock )
   {
     //...
   }
}

您必须在静态对象上使用锁

private static Object saveLock = new Object();

public static Save(string file)
{
   lock (saveLock )
   {
     //...
   }
}

看看这个,它讨论了
lock
语句的用法。

看看这个,它讨论了
lock
语句的用法。

快告诉我!唯一不同的是,我会将_syncRoot声明为只读。虽然这个建议会起作用,但它可能会给网站带来很多争议。可能值得在回答中指出这一点,因为如果对页面的每一个请求都会导致调用它,那么性能就会受到影响。如果该方法抛出异常,锁会自动释放吗?@Wololo,锁构造类似于
Monitor.Enter(lockObj);试试{/*code*/}最后{Monitor.Exit(lockObj)}
,这应该能很好地回答你的问题。快告诉我!唯一不同的是,我会将_syncRoot声明为只读。虽然这个建议会起作用,但它可能会给网站带来很多争议。可能值得在回答中指出这一点,因为如果对页面的每一个请求都会导致调用它,那么性能就会受到影响。如果该方法抛出异常,锁会自动释放吗?@Wololo,锁构造类似于
Monitor.Enter(lockObj);尝试{/*code*/}最后{Monitor.Exit(lockObj)}
,这应该可以很好地回答您的问题。