I am trying to access a ravendb file system from an f# script.
I have this code:
#r "libs/Raven.Abstractions.dll"
#r "libs/Raven.Client.Lightweight.dll"
open Raven.Client.FileSystem
let fs = new FilesStore(Url = "http://localhost:8080", DefaultFileSystem = "TestFS")
let s = fs.Initialize()
printfn "%A" s.Identifier
if I execute the script using fsi
on the file or by compiling the script with fsc
it runs and prints http://localhost:8080
as expected but if I execute it in F# interactive
inside VisualStudio it just hangs on the fs.Initialize()
line
Now, if I call the Initialize
method with false
(ensureFileSystemExists) it runs ok in interactive.
Why does it work like this?
this is a piece of the FilesStore.cs code:
if (ensureFileSystemExists && string.IsNullOrEmpty(DefaultFileSystem) == false)
{
try
{
AsyncFilesCommands.ForFileSystem(DefaultFileSystem)
.EnsureFileSystemExistsAsync()
.Wait();
}
catch(Exception)
{
if (failIfCannotCreate)
throw;
}
}
the ensureFileSystemExists
variable is the false
I pass on the second call to Initialize
(the one that works on VS' F# interactive)
Update to the latest build, it should resolve this issue. The underlying issue is the TPL scheduler used by default.