【发布时间】:2018-07-05 01:36:49
【问题描述】:
注意:我不是专业的软件开发人员,但我确实编写了很多不使用异步的代码,所以如果这个问题真的很直截了当,我深表歉意。
我正在与一个用 C# 编写的库进行交互。有一个特定的函数(我们称之为 'func')返回一个 'Threading.Tasks.Task>'
我正在 F# 中构建一个使用 func 的库。我在控制台应用程序中测试了以下代码,它运行良好。
let result =
func()
|> Async.AwaitTask
|> Async.RunSynchronously
|> Array.ofSeq
但是,当我从 WinForms 应用程序(这最终是我想要做的)运行它时,执行会阻塞在表单代码中并且永远不会返回。
所以我弄乱了代码并尝试了以下方法。
let result =
async{
let! temp =
func()
|> Async.AwaitTask
return temp
} |> Async.RunSynchronously |> Array.ofSeq
为什么第一个 sn-p 不起作用?为什么第二个 sn-p 工作? this page 上有什么可以回答这些问题的吗?如果是这样,它似乎并不明显。如果没有,你能指点我一个可以做的地方吗?
【问题讨论】:
标签: multithreading f# async-await task-parallel-library