为什么在 Xamarin PCL 路径上共享冲突

why Sharing violation on path in Xamarin PCL

这是完整的错误

Sharing violation on path /data/data/com.test.app/files/myapp/myappfile.txt

我有静态 class 和静态在静态方法中有这个方法,但问题仍然存在

我尝试将其包装在 lock 语句中,但我不确定它是否可以解决 issue.Is 是否有更好的方法来解决此问题

这是导致问题的代码片段

            try
            {
                var directory = await NavigateToFolder(directoryName);
                IFile file = await directory.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
                await file.WriteAllTextAsync(text);
            }
            catch (Exception e)
            {
                Debug.WriteLine("Error saving:" + e.Message);
            }

仅供参考:

更新:

有时此代码片段会损坏 file.I 如果我尝试写入 times 会出现以下错误。

Could not find file "/data/data/com.test.app/files/myapp/myappfile.txt"

欢迎提出任何有用的建议

这是正确的代码。文件系统没有实现锁,访问文件系统总是容易出错,你必须预料到操作可能会失败并使用try/catch来捕获异常。

因为这是 Xamarin 应用程序,您可能拥有只有您的应用程序才能访问这些文件的奢侈,因此最终您可能会在应用程序内部解决问题。最好的解决方案将取决于上下文,但在大多数情况下,最好的想法可能是使用去抖动策略(使用 Timer 以便关键方法的启动频率可能不会超过一次,例如 100 毫秒)。