小编Ben*_*jol的帖子

结合F#异步功能

我在这里有点沮丧.我知道我已经掌握了所有的东西,但我无法弄清楚如何将它们结合起来......

let saveImageToDisk path content =
    async {
        use s = new FileStream(path, FileMode.OpenOrCreate)
        do! s.AsyncWrite(content)
        printfn "Done writing %A" path
        } // returns Async<unit>

let getImages imageUrls =
    imageUrls
        |> Seq.map (fun url -> topath url, getImage url)
        //Next line not happy because content is Async<byte[]> instead of byte[]
        |> Seq.map (fun (path, content) -> saveImageToDisk path content)
        |> Async.Parallel
        |> Async.RunSynchronously
Run Code Online (Sandbox Code Playgroud)

f# asynchronous

5
推荐指数
1
解决办法
572
查看次数

Visual Studio 2010 Ultimate中的Pex和F#

我一直在尝试在F#项目中使用Pex,但我遇到了几个问题,我将不胜感激一些帮助:

  1. Visual Studio Pex插件工作半小时,而不是复杂的项目探索.

  2. 之后,每次从Visual Studio 2010中运行Pex Exploration时,都会收到!warning! [metadata] no explorations found after applying all filters; did you forget a [PexClass] or [PexMethod] attribute?错误消息.如果我在进行探索时复制并粘贴visual studio运行的命令并删除一些属性(如sourceFilter ...)并从命令控制台运行它,那么我会得到一些生成的测试.知道为什么visual studio会产生无效命令吗?

  3. 一段时间后,Microsoft.Pex.Framework.dll从.Net Reference列表中消失,我必须使用其文件路径手动引用它,否则我甚至无法再引用它,我必须卸载/重新安装Pex.(A reference to C:\Program Files (x86)\Microsoft Moles\PublicAssemblie\Microsoft.Pex.Framework.dll could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component.)

当我在C#项目上工作时,不会发生所有这些问题.

问题1 2 3发生在学术版本中.

使用可用于MSDN订阅者的版本我从未在Visual Studio(Visual Studio 2010 Ultimate NO SP1)中使用它.但它在命令提示符下工作.我没有遇到这个版本的问题3.

有没有人设法让Pex在Visual Studio中使用F#?如果是,你可以告诉我你是怎么做到的吗?你使用哪个版本(VS和Pex)?

f# pex visual-studio-2010 moles pex-and-moles

5
推荐指数
1
解决办法
465
查看次数

等待后台线程完成

很抱歉,如果这是重复的,但我不太确定我需要使用哪些术语来查找此问题的现有答案.

我正在尝试提高应用程序的启动性能,伪代码看起来有点像这样.

LoadBigFileFromDisk();  //slow
SetupNetwork();         //even slower
UseBigFileFromDisk();
Run Code Online (Sandbox Code Playgroud)

我认为第一步是磁盘绑定,另一个是网络绑定(并且速度较慢),我可以在后台线程中运行第一步(当前正在玩ThreadPool.QueueUserWorkItem,但不确定这是否是最好的方式)并提高性能一点点.

它有效,但令我担心的是,我依靠的第二步足够慢,第一步完成.

我知道我可以在_done某个地方设置一个布尔值while !,但是有更优雅/惯用的解决方案吗?

(不是.Net 4.0,所以虽然我对基于任务的感兴趣,但我需要后备解决方案).

c# background-process

5
推荐指数
1
解决办法
2976
查看次数

这个管道元组运算符在某个地方已经存在了吗?

我知道(||>)哪个了(a' * 'b) -> ('a -> b' -> 'c) -> 'c

但我发现这非常有用,并想知道我是否重新发明了轮子:

// ('a * 'a) -> ('a -> 'b) -> ('b * 'b)
let inline (|>>) (a,b) f = (f a, f b)
Run Code Online (Sandbox Code Playgroud)

(*它可能发生,我ceil半小时前才发现这个功能!)

f# tuples pipe operators

5
推荐指数
1
解决办法
838
查看次数

尝试通过 SSH 克隆时“似乎不是 git 存储库”

我有一台运行 Windows 10 的计算机,我想在其上托管 git 存储库。OpenSSH 正在运行,我可以通过 Powershell 通过 SSH 连接到机器,因此它是可连接的。

我在该机器上名为 Test 的文件夹中创建了一个新的 git via

git init --shared --bare
Run Code Online (Sandbox Code Playgroud)

我现在尝试使用 Sublime Merge 和源 URL 进行克隆,如下所示:

ssh://USER@IP:/Test
Run Code Online (Sandbox Code Playgroud)

但是,当我输入密码后,出现两个错误:

fatal: "/Test" does not appear to be a git repository

fatal: Could not read from remote repository
Run Code Online (Sandbox Code Playgroud)

我尝试过用谷歌搜索这两个问题,但没有得到任何有帮助的信息。有人能帮忙吗?

编辑:我可以在远程计算机上本地克隆、提交和推送,所以它绝对是一个 git 存储库。

编辑#2:已修复。遵循本指南,了解如何通过强制存储库使用 powershell(最底部)来直接指向 git 文件夹https://github.com/PowerShell/Win32-OpenSSH/wiki/Setting-up-a-Git-server-on -Windows-使用-Git-for-Windows-and-Win32_OpenSSH

**请注意,由于已知问题,git clone user@domain@servermachine:C:/test/myrepo.git 不起作用。解决这个问题,将 powershell 设置为注册表中的默认 Shell。或者当 cmd 是默认 shell 时执行以下步骤:

cd c:\mygitrepros
# initialize a local repo folder
git init mylocalrepo
cd mylocalrepo
# …
Run Code Online (Sandbox Code Playgroud)

git ssh

5
推荐指数
1
解决办法
1834
查看次数

Span 类型是否意味着堆栈不再是“一个实现细节”?

这篇被广泛引用的帖子中,Eric Lippert 解释说“堆栈是一个实现细节”。

据我了解,在 .NET 世界中,主要区别在于引用类型与值类型。

但是阅读Span<>类型的介绍,我看到大量对“堆”和“堆栈”的引用。在这种情况下,这些“引用和值”的代理是不是堆/堆栈的区别又回来了?

.net c#

5
推荐指数
0
解决办法
52
查看次数

"System.InvalidOperationException:该对象目前正在其他地方使用" - 我该如何解决这个问题?

尝试更新图像时出现此错误.这是一个跨线程更新,但我使用.Invoke(),所以这不应该是问题,如果它.

c# exception invoke

4
推荐指数
1
解决办法
3483
查看次数

F#浮点范围是实验性的,可能已弃用

我正在尝试使用给定的增量在两个值之间进行插值.

[ 1.0 .. 0.5 .. 20.0 ]
Run Code Online (Sandbox Code Playgroud)

编译器告诉我这已被弃用,并建议使用ints然后转换为float.但是如果我有一个小数增量,这似乎有点啰嗦 - 我是否必须将我的开始值和结束值除以我的增量,然后再将多次除以?(yeuch!).

我曾经看过一些关于使用序列理解来做这件事的事情,但我不记得是怎么回事.

请帮忙.

floating-point f#

4
推荐指数
2
解决办法
820
查看次数

在F#中实现构建器模式(la System.Text.StringBuilder)

变异状态是构建器模式的中心.有没有一种惯用的方法来实现F#中这样一个类的内部,它将减少/消除可变状态,同时保留通常的接口(这个类主要用于其他.NET语言)?

这是一个天真的实现:

type QueryBuilder<'T>() =                              //'
    let where = ref None
    let orderBy = ref None
    let groupBy = ref None
    member x.Where(cond) =
        match !where with
        | None -> where := Some(cond)
        | _ -> invalidOp "Multiple WHERE clauses are not permitted"
    // members OrderBy and GroupBy implemented similarly
Run Code Online (Sandbox Code Playgroud)

一种想法是创建一个记录类型来存储内部,并使用复制和更新表达式.

type private QueryBuilderSpec<'T> =                     //'
    { Where : ('T -> bool) option;                      //'
      OrderBy : (('T -> obj) * bool) list;              //'
      GroupBy : ('T -> obj) …
Run Code Online (Sandbox Code Playgroud)

f#

4
推荐指数
1
解决办法
917
查看次数

F#DataContractJsonSerializer StackOverflowException

dataElementsList : TypesAndData.DataElement list
Run Code Online (Sandbox Code Playgroud)

是一个包含50,000条记录的列表(实际上还有更多记录,但让我们从小开始).我正在尝试序列化为JSON文件:

let ser = Json.DataContractJsonSerializer(typeof<TypesAndData.DataElement list>) 
use ofs = File.OpenWrite(fileName)
let result = ser.WriteObject(ofs, dataElementsList)
Run Code Online (Sandbox Code Playgroud)

并得到臭名昭着的StackOverflowException.准确地说:

FSharp.Core.dll中发生了未处理的"System.StackOverflowException"类型异常

任何建议?

stack-overflow f# datacontractserializer netdatacontractserializer

4
推荐指数
1
解决办法
733
查看次数