如何使用async await模式将对象写入另一个进程打开的文件?

时间:2016-12-12 11:53:48

标签: c# async-await

我忙于编写将JSON序列化对象写入JSON文件的程序。 现在我遇到了问题。我想将列表中的每个对象单独写入JSON文件。在实际场景中,程序应该将所有对象添加到列表中,然后将列表一次写入JSON文件,但是现在我想逐个进行。我尝试这样做的方式会引入I / O错误,而且我不清楚为什么会这样做。

readonly BaseStore<TestObject> _store2 = new BaseStore<TestObject>("test", Settings.DatabaseBasePath);

private async void testToolStripMenuItem_Click(object sender, EventArgs e)
{
    await Write();
}

private async Task Write()
{
    for (int i = 0; i < 1000; i++)
    {
        await _store2.Save(new TestObject
        {
            Property = "value"
        });
    }
}

保存方法的代码:

public async Task Save(T obj)
{
    var collection = _database.Load<T>(_collection);

    // do some collection changes

    await _database.Save(collection, _collection);
}

上述方法将调用以下方法:

public async Task Save(object obj, string collectionName)
{
    string fileName = string.Format("{0}{1}", collectionName, ".json");
    var json = JsonConvert.SerializeObject(obj, Formatting.None);

    byte[] encodedText = Encoding.Unicode.GetBytes(json);

    using (FileStream sourceStream = new FileStream(Path.Combine(_basePath, fileName),
        FileMode.Append, FileAccess.Write, FileShare.None,
        bufferSize: 4096, useAsync: true))
    {
        await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
    };
}

以上代码会引发以下错误:

调用目标抛出了异常。 无法对打开了用户映射部分的文件执行请求的操作。

我想问题可能是for-loop中的Save方法尝试访问JSON文件,而前一个Save调用打开它,但我不知道如何解决它。

有人可以指出我正确的方向吗?

0 个答案:

没有答案