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)}
,这应该可以很好地回答您的问题。