4

我有来自http://sourceforge.net/p/onvifdm/code/HEAD/tree/的来源

当我尝试构建此解决方案时,我在onvif.utils项目中遇到以下问题。

use! response = request.AsyncGetResponse() |> Async.Map(fun x-> x:?>HttpWebResponse)

Error: Method or object constructor 'Map' not found
D:\Working\onvifdm\onvifdm-code-96-trunk\onvif\onvif.utils\OdmSession.fs
4

4 回答 4

4

这是一个扩展 Async 的函数,取自关于理解 map的有用来源。

module Async =
    let map f op = async {
        let! x    = op
        let value = f x
        return value
    }

具有类型签名('a -> 'b) -> Async<'a> -> Async<'b>

例如 -

let onInts = async { return 1 }

... 是一个async<int>, 并且 ...

let onStrings = Async.map (fun x -> x.ToString()) onInts

... 产生一个Async<string>.

于 2018-08-16T07:42:21.323 回答
2

您可以使用以下代码作为替代:

let! webResponse = request.AsyncGetResponse()
use response = webResponse:?>HttpWebResponse

您也可以编写自己的异步类型扩展 - 这是一个如何完成的示例。您所需要的只是为上面的代码实现高阶函数。

于 2015-02-28T04:50:06.677 回答
0

如果这仍然是一个悬而未决的问题,让我建议使用 FsToolkit.ErrorHandling:[https://www.nuget.org/packages/FsToolkit.ErrorHandling] 它包含一个 Async.map 实现和许多有用的功能来处理 Result .

作为替代方案,我认为这应该可行:

use! response = request.AsyncGetResponse() |> async.Bind (fun x-> x:?>HttpWebResponse |> async.Return)
于 2021-10-27T12:35:52.883 回答
0

对于那些仍在寻找答案的人来说,问题是 Async 引用了错误的类。将其更改为 Microsoft.FSharp.Control.Async 应该可以解决问题。

于 2016-03-23T21:04:37.097 回答