【发布时间】:2022-08-02 14:33:07
【问题描述】:
我用 F# 编写大部分后端代码 - 但我的 WPF 项目是用 C# 编写的,我正在处理进程和 UI 之间的进度报告。
我的 F# 代码
type DownloadProgressModel = {
mutable PercentageComplete: int
totalOrders: int
mutable orderPosition: int
}
let doMockDownload(progress: IProgress<DownloadProgressModel>) = async {
let downloadprogress: DownloadProgressModel = {
PercentageComplete = 0
totalOrders = 20
orderPosition = 0
}
for i in [0..20] do
do! Async.Sleep(2000)
downloadprogress.orderPosition <- i
downloadprogress.PercentageComplete <- (i*100) / 20
progress.Report(downloadprogress)
return \"Finished\"
}
我的 C# 从 WPF 视图调用代码
private async void SimpleButton_Click(object sender, RoutedEventArgs e)
{
Progress<DownloadProgressModel> progress = new Progress<DownloadProgressModel>();
progress.ProgressChanged += Progress_ProgressChanged;
var a = await MockDownload.doMockDownload(progress);
}
private void Progress_ProgressChanged(object sender, DownloadProgressModel e)
{
ordersProgress.Value = e.PercentageComplete;
}
我收到以下错误:(违规行 var a = await MockDownload.doMockDownload(progress); )
\'FSharpAsync\' 不包含 \'GetAwaiter\' 的定义 并且没有可访问的扩展方法 \'GetAwaiter\' 接受第一个 可以找到类型为 \'FSharpAsync\' 的参数(您是否缺少 using 指令或程序集引用?)
这大致基于 C# 高级异步 - 获取进度报告、取消任务等,由 youtube 上的 \"IamTimCorey\" 提供 - 但这都是 C#。
标签: asynchronous f#