【发布时间】:2015-08-19 18:22:33
【问题描述】:
我需要在我的 Windows 通用应用程序中编写一个方法来写入 SD 卡。在下面的方法中,如何确保两个线程不会同时尝试写入同一个文件?
public async void WriteToCard(string strFileName, IEnumerable<string> listLinesToWrite)
{
IStorageItem item = await folder.GetItemAsync(strFileName);
StorageFile file = (StorageFile)item;
await Windows.Storage.FileIO.WriteLinesAsync(file, listLinesToWrite);
}
【问题讨论】:
-
最简单的方法:一个接一个地写(如果你尝试并行写,很可能你不会变得更快) - 如果不是你必须自己照顾它(没有办法给来自这个 sn-p 的好建议)
-
Carsten - 我不是在寻找性能提升。我担心的是这个方法在同一个文件上被调用了两次。我将使用我在使用锁的旧应用程序中使用的代码来编辑我的问题。我的理解是你不应该在异步方法中使用锁。
-
是的,它们使用起来很棘手(正如 dcastr 所说的那样)-我只是将所有写入排队并一个接一个地写入(TPL-dataflow 中有预构建的东西,你肯定会如果您寻找 agents 就可以找到一些东西 - 当然您可以使用
Queue,ConcurrentQueue, ...) -
@Carsten 在提到 TPL Dataflow 库时可能指的是
ActionBlock<T>。 -
是的,就是这样(我不记得了,因为你在 F# 中有更好的选择;))
标签: c# multithreading asynchronous win-universal-app iot