Asynchronous 异步并行加主线程

Asynchronous 异步并行加主线程,asynchronous,f#,Asynchronous,F#,我有一个F#程序来复制我想要异步工作的文件。到目前为止,我已经: let asyncFileCopy (source, target, overwrite) = let copyfn (source,target,overwrite) = printfn "Copying %s to %s" source target File.Copy(source, target, overwrite) printfn "Copyied %s to %

我有一个F#程序来复制我想要异步工作的文件。到目前为止,我已经:

let asyncFileCopy (source, target, overwrite) =
    let copyfn (source,target,overwrite) =
        printfn "Copying %s to %s" source target
        File.Copy(source, target, overwrite)
        printfn "Copyied %s to %s" source target
    let fn = new Func<string * string * bool, unit>(copyfn)
    Async.FromBeginEnd((source, target, overwrite), fn.BeginInvoke, fn.EndInvoke)

[<EntryPoint>]
let main argv = 

    let copyfile1 = asyncFileCopy("file1", "file2", true)
    let copyfile2 = asyncFileCopy("file3", "file4", true)

    let asynctask =
        [copyfile1; copyfile2] 
        |> Async.Parallel 

    printfn "doing other stuff"

    Async.RunSynchronously asynctask |> ignore
让asyncFileCopy(源、目标、覆盖)=
让copyfn(源、目标、覆盖)=
printfn“将%s复制到%s”源目标
文件复制(源、目标、覆盖)
printfn“复制%s到%s”源目标
设fn=newfunc(copyfn)
Async.FromBeginEnd((源、目标、覆盖),fn.BeginInvoke,fn.EndInvoke)
[]
让主argv=
让copyfile1=asyncFileCopy(“file1”、“file2”,true)
让copyfile2=asyncFileCopy(“file3”,“file4”,true)
让异步任务=
[copyfile1;copyfile2]
|>异步并行
打印fn“做其他事情”
Async.RunSynchronously Asynchronous任务|>忽略
它可以工作(复制文件),但不是我想要的方式。我想启动并行复制操作,以便它们开始复制。同时,我想继续在主线程上做一些事情。稍后,我想等待异步任务完成。我的代码似乎要做的是设置并行副本,然后做其他事情,但在异步运行之前,不会实际执行副本

是否有一种方法可以有效地实现异步。同步运行“a”,在线程池中启动副本,然后执行其他操作,然后等待副本完成?

解决了这个问题:

 let asynctask =
    [copyfile1; copyfile2] 
    |> Async.Parallel 
    |> Async.StartAsTask

let result = Async.AwaitIAsyncResult asynctask

printfn "doing other stuff"

Async.RunSynchronously result |> ignore
printfn "Done"

关键是使用StartAsk、AwaitIAsyncResult和稍后同步运行以等待任务完成

在您提问48小时后,您可以通过单击其分数下的复选框来接受自己的答案。(系统要求您等待48小时,因为其他人也可能会回答,答案甚至比您的答案更好。)一旦您能够接受自己的答案,您应该这样做,因为这会在搜索结果中给它一个不同的颜色,并让其他人知道,如果他们点击这个问题,他们将看到解决问题的答案。(当你自己在寻找答案时,知道一些非常好的事情!)