F# netstandard20中的FSharp.Core FSharpFunc.FromConverter

F# netstandard20中的FSharp.Core FSharpFunc.FromConverter,f#,.net-standard-2.0,F#,.net Standard 2.0,将项目转换为.NET标准2.0时,FSharpFuncFromConverter方法不再可用。有没有办法将此代码转换为.NET标准2.0FSharp.Core实现 async Task<Unit> RunProcess(FSharpMailboxProcessor<T> mailbox, Func<T, Task> process) { ... } public BaseMailboxProcessor(Func<TFuncInput, Task>

将项目转换为.NET标准2.0时,
FSharpFunc
<
FSharp.Core
库中的code>FromConverter方法不再可用。有没有办法将此代码转换为.NET标准2.0
FSharp.Core
实现

async Task<Unit> RunProcess(FSharpMailboxProcessor<T> mailbox, Func<T, Task> process) { ... }

public BaseMailboxProcessor(Func<TFuncInput, Task> process, Action<Exception, TFuncInput> errorHandler = null, CancellationToken? cancellationToken = null)
{
    m_ErrorHandler = errorHandler;
    m_TokenSource = cancellationToken.HasValue ? CancellationTokenSource.CreateLinkedTokenSource(cancellationToken.Value) :
                                                 new CancellationTokenSource();
    var cancellationOption = FSharpOption<CancellationToken>.Some(m_TokenSource.Token);
    Converter<FSharpMailboxProcessor<TMailboxInput>, FSharpAsync<Unit>> converter = (mailbox) =>
    {
        return FSharpAsync.AwaitTask<Unit>(RunProcess(mailbox, process));
    };

    m_Mailbox = new FSharpMailboxProcessor<TMailboxInput>(FSharpFunc<FSharpMailboxProcessor<TMailboxInput>, FSharpAsync<Unit>>.FromConverter(converter), cancellationOption);
    m_Mailbox.Start();
}
异步任务运行进程(FSharpMailboxProcessor邮箱,Func进程){…}
public BaseMailboxProcessor(Func进程,Action errorHandler=null,CancellationToken?CancellationToken=null)
{
m_ErrorHandler=ErrorHandler;
m_TokenSource=cancellationToken.HasValue?CancellationTokenSource.CreateLinkedTokenSource(cancellationToken.Value):
新的CancellationTokenSource();
var cancellationOption=FSharpOption.Some(m_TokenSource.Token);
转换器=(邮箱)=>
{
返回fsharpsync.AwaitTask(RunProcess(邮箱,进程));
};
m_Mailbox=new FSharpMailboxProcessor(FSharpFunc.FromConverter(converter),cancellationOption);
m_Mailbox.Start();
}

您应该能够使用
funconvert.ToFSharpFunc
,这似乎仍然存在于FSharp.Core的netstandard版本中。

您可以简单地定义自己的:

let ToFSharpFunc (converter: System.Func<_, _>) = fun t -> converter.Invoke t
let-ToFSharpFunc(converter:System.Func)=funt t->converter.Invoke t

另外,如果你需要在C中使用
FSharpFunc
,你可以在
的地方调用
.Invoke
FSharpFunc
对象是
Func
funconvert.ToFSharpFunc
的问题是它返回
FSharpFunc
,我需要它返回
FSharpFunc
,其中T是
FSharpMailboxProcessor
,除非我遗漏了该方法无法实现的内容。有两个
funconvert.ToFSharpFunc
重载,一个用于
操作
,另一个用于
转换器
转换器
的过载应该正是您所需要的。我本应该指定这一点,但我使用的是最新的FSharp.Core,即4.4.1.0。该方法在netstandard20的该版本中不可用,但在4.4.0.0中可用。我还进行了检查,在使用.net标准2.0时,
ToFSharpFunc
不会出现。不知道为什么。我希望能有一个C#实现。但是,作为最后一种手段,将F#dll包含在该函数中可能会起作用。有什么原因不能在C#中使用时在
FSharpFunc
上调用