2

我正在尝试从 f# 脚本访问 ravendb 文件系统。

我有这个代码:

#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

如果我fsi在文件上使用或通过编译脚本来执行脚本,fsc它会按预期运行和打印http://localhost:8080,但如果我F# interactive在 VisualStudio 中执行它,它只会挂fs.Initialize()在行上

现在,如果我用(ensureFileSystemExists)调用该Initialize方法,它可以在交互式中运行。false

为什么它会这样工作?

这是FilesStore.cs 代码的一部分:

if (ensureFileSystemExists && string.IsNullOrEmpty(DefaultFileSystem) == false)
{
    try
    {
        AsyncFilesCommands.ForFileSystem(DefaultFileSystem)
                                      .EnsureFileSystemExistsAsync()
                                      .Wait();
    }
    catch(Exception)
    {
        if (failIfCannotCreate)
            throw;
    }
}

ensureFileSystemExists变量是我在false第二次调用时传递给的Initialize(适用于 VS 的 F# 交互的那个)

4

1 回答 1

1

更新到最新版本,应该可以解决这个问题。根本问题是默认使用的 TPL 调度程序。

于 2015-03-20T22:29:53.520 回答