You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在F# Web API的Main方法中调用返回Task的函数?

问题:F# Web API启动阶段异步获取配置的最优实现

默认F# Web API模板的Main方法(简化版)

module Program =
    let exitCode = 0

    [<EntryPoint>]
    let main args =

        let builder = WebApplication.CreateBuilder(args)

        builder.Services.AddControllers()

        let app = builder.Build()

        app.Run()

        exitCode

我需要在项目启动阶段调用返回Task<T>的异步代码,从外部系统获取配置信息。目前我写出了一个可编译运行的方案,包含模拟异步获取配置的函数:

我的实现方案

module Program =
    
    let getConfig (key:string) : Task<string> = task {
        do! Task.Delay 10 // 模拟异步操作
        return $"{key}:123"
    }
    
    let exitCode = 0

    [<EntryPoint>]
    let main args =
        task {
            
            let key = args[0]
            
            let! configValue = getConfig key
            
            let builder = WebApplication.CreateBuilder(args)

            builder.Services.AddControllers()

            let app = builder.Build()

            app.Run()
        } |> Async.AwaitTask |> Async.RunSynchronously

        exitCode

这个方案能正常编译,但我不确定这是不是最优实现方式。我的思路是否正确?有没有更好的处理办法?


更新:简化后的实现

根据回答,我将代码简化为以下版本,运行正常且更简洁:

module Program =
    
    let getConfig (key:string) : Task<string> = task {
        do! Task.Delay 10 // 模拟异步操作
        return $"{key}:123"
    }
    
    let exitCode = 0

    [<EntryPoint>]
    let main args =
        let key = args[0]
        
        let configValue = getConfig key |> Async.AwaitTask |> Async.RunSynchronously
        
        printfn $"{configValue}"
        
        let builder = WebApplication.CreateBuilder(args)

        builder.Services.AddControllers()

        let app = builder.Build()

        exitCode

内容的提问来源于stack exchange,提问作者Matthew MacFarland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:33:16