小编scr*_*wtp的帖子

F#字符串连接运算符^的作用是什么

我正在阅读文档并点击了该段落

有两种连接字符串的方法:使用+运算符或使用^运算符。+运算符保持与.NET Framework字符串处理功能的兼容性。

我把它砸进了linqpad,它运行正常,但是我得到了警告

此构造用于ML兼容性。考虑改用'+'运算符

在网上搜索了更多详细信息,但想到了nix。

谁能详细说明^的预期功能?

.net f#

13
推荐指数
1
解决办法
122
查看次数

HttpClient的超时在异步块内不起作用

我正在尝试使用HttpClient在F#中发送POST请求.不幸的是,我发现F#中的超时不起作用.我有这样的代码:

let asyncTest() = async {
    let httpClient = new HttpClient()
    try 
        let! res = httpClient.PostAsync("http://135.128.223.112", new StringContent("test"), (new CancellationTokenSource(2000)).Token) |> Async.AwaitTask
        Console.WriteLine("Test 1")
    with 
        | :? Exception as e -> Console.WriteLine("Test 2")
} 
Run Code Online (Sandbox Code Playgroud)

您在代码中可以看到的IP不存在.我希望2秒后取消呼叫(取消令牌),但永远不会抛出异常("测试2"永远不会在屏幕上打印).在PostAsync方法调用之后,程序控制永远不会返回到异步块.如果我使用HttpClient.Timeout属性或Async.Catch而不是try块,行为是相同的.

在C#中,相同的代码按预期工作,引发两秒异常:

private async Task Test()
{
    var httpClient = new HttpClient();
    await
            httpClient.PostAsync("http://135.128.223.112", new StringContent("test"),
                new CancellationTokenSource(2000).Token);
 }
Run Code Online (Sandbox Code Playgroud)

我知道F#和C#中的异步是不同的所以我希望这是由一些同步问题引起的,死锁......我希望有更深入了解F#async的人可以解释这个并提供解决方法.

更新:我正在开始像这样的F#异步工作:

Async.Start (asyncTest())
Run Code Online (Sandbox Code Playgroud)

我在控制台应用程序中运行此测试,最后我有ReadKey(),因此应用程序不会比异步更快结束.

在评论Fyodor的评论后,我试图将其更改为RunSynchronously.现在引发异常,但我仍然需要它与Async.Start一起工作.

f# asynchronous c#-to-f# async-await f#-async

3
推荐指数
1
解决办法
452
查看次数

如何在定义的F#函数中交换应用程序的顺序?

鉴于一般功能 f:a->b->c

我想创建一个函数,它执行与f相同的事情/计算,但是交换了两个输入参数(或currying命令)的顺序.

所以寻找完全相同的计算g:b->a->c在哪里gf

==

let transform1 (f:a->b->c) : (b->a->c) = 
?
Run Code Online (Sandbox Code Playgroud)

f# functional-programming

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