如何在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
相关产品推荐
相关产品推荐

