1

我有一个需要读取和写入文件的进程。该应用程序对其读写有特定的顺序,我想保留这个顺序。我想要做的是实现一些东西,让第一个操作开始并让第二个操作等到​​第一个操作完成,先到先服务,比如队列来访问文件。从我读过的文件锁定看来,这可能是我正在寻找的东西,但我找不到一个很好的例子。谁能提供一份?

目前我正在使用带有 .Synchronized 的 TextReader/Writer,但这并没有达到我希望的效果。

抱歉,如果这是一个非常基本的问题,线程让我头疼:S

4

2 回答 2

2

它应该像这样简单:

public static readonly object LockObj = new object();

public void AnOperation()
{
    lock (LockObj)
    {
        using (var fs = File.Open("yourfile.bin"))
        {
            // do something with file
        }
    }
}

public void SomeOperation()
{
    lock (LockObj)
    {
        using (var fs = File.Open("yourfile.bin"))
        {
            // do something else with file
        }
    }
}

基本上,定义一个锁对象,然后每当您需要对文件执行某些操作时,请确保使用 C#lock关键字获得锁。到达lock语句后,执行将无限期地阻塞,直到获得锁为止。

还有其他可以用于锁定的结构,但我发现lock关键字是最直接的。

于 2012-11-07T16:02:36.507 回答
1

如果您使用的是 .Net Framework 的当前版本,则可以从Task.ContinueWith.

如果您的工作单元在逻辑上总是“读一些,然后写一些”,那么以下内容简洁地表达了该意图并且应该扩展:

string path = "file.dat";

// Start a reader task
var task = Task.Factory.StartNew(() => ReadFromFile(path));

// Continue with a writer task
task.ContinueWith(tt => WriteToFile(path));

// We're guaranteed that the read will occur before the write
// and that the write will occur once the read completes.
// We also can check the antecedent task's result (tt.Result in our
// example) for any special error logic we need.
于 2012-11-07T16:02:58.273 回答