我编写了一个处理大型文本文件的应用程序。内部,文本文件被存储为DataObject,其中包含多个数据,如文件的行数、文件路径等。我可以使用应用程序修改这些文件(数据对象)。由于某些方法非常耗时,因此我在任务中运行它们以避免阻塞UI。现在,在非阻塞UI下,我想确保用户不会尝试修改正在任务中处理的文件,因此我想锁定DataObject。为此,我认为可以向DataObject类添加锁定对象。然后,我将以以下方式锁定DataObject:
public class DataObject {
public object LockObject = new object();
// ...
public DataObject() { }
}
public void timeConsumingMethod(DataObject data) {
Task.Factory.StartNew(new Action(() => {
lock(data.LockObject) {
// do work
}
}));
}
这种方法可行吗?还有更好的方法吗?
Task.Run
而不是StartNew
,因为后者存在风险。 - VMAtm