MonoTouch File.ReadAllText lanza una exception en FileStream.Dispose () interno

El siguiente código parece producir de vez en cuando este stacktrace. Parece que está sucediendo dentro del marco cuando se invoca el método de eliminación en el object interno FileStream ? Me parece un error, ¿alguna idea?

 var previousVersion = long.Parse(File.ReadAllText(Paths.VersionFile)); 

StackTrace:

  System.IO.IOException: Invalid parameter at System.IO.FileStream.Dispose (Boolean disposing) [0x00000] in <filename unknown>:0 at System.IO.Stream.Close () [0x00000] in <filename unknown>:0 at System.IO.StreamReader.Dispose (Boolean disposing) [0x00000] in <filename unknown>:0 at System.IO.TextReader.Dispose () [0x00000] in <filename unknown>:0 at System.IO.File.ReadAllText (System.String path) [0x00000] in <filename unknown>:0 at CatalystHD.Shanetworking.BaseLoginController.CheckIfFirstRunThisVersion () [0x00000] in <filename unknown>:0 at CatalystHD.Shanetworking.BaseLoginController.ViewDidLoad () [0x00000] in <filename unknown>:0 at MonoTouch.UIKit.UIViewController.get_View () [0x00000] in <filename unknown>:0 at CatalystHD.IPad.RootViewController.AnimateTo (MonoTouch.UIKit.UIViewController aController, UIViewAnimationTransition transition) [0x00000] in <filename unknown>:0 at CatalystHD.IPad.RootViewController.Logout (Boolean timeout) [0x00000] in <filename unknown>:0 at CatalystHD.IPad.NotebookSelectionController.logoutButton_Clicked (System.Object sender, System.EventArgs e) [0x00000] in <filename unknown>:0 at MonoTouch.UIKit.UIBarButtonItem Callback.Call (MonoTouch.Foundation.NSObject sender) [0x00000] in <filename unknown>:0 at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00000] in <filename unknown>:0 at MonoTouch.UIKit.UIApplication.Main (System.String[] args) [0x00000] in <filename unknown>:0 at CatalystHD.Application.Main (System.String[] args) [0x00000] in <filename unknown>:0 

EDIT VersionFile path se VersionFile esta manera:

 public static string VersionFile { get { var path = Environment.GetFolderPath(Environment.SpecialFolder.Personal); return Path.Combine(path, "version.dat"); } } 

Si tuviera que adivinar, creo que podría estar encontrando una condición de carrera debido al implícito Flush() que se produce durante la eliminación de FileStream debajo de la capilla en esa llamada ReadAllText .

(advertencia: no frente a las fonts mono, por lo que no puede confirmar el comportamiento exacto)

Es posible que:

  • Está reemplazando / reabriendo / etc. la misma ruta de file en otro subprocess?
  • ¿Eliminar esa ruta inmediatamente después o en otro hilo?
  • De lo contrario, perder el acceso a la ruta marcada? (¿Desmontar el file compartido?)