ファイルを非同期にコピーするには、次のようなものがありますか?F#非同期ファイルコピー
let filecopyasync (source, target) =
let task = Task.Run((fun() ->File.Copy(source, target, true)))
// do other stuff
Async.AwaitIAsyncResult task
特に、これは私が「他のものをやっている」ときにコピーを行う新しいスレッドを起動しますか?
UPDATE:
let asyncFileCopy (source, target, overwrite) =
printfn "Copying %s to %s" source target
let fn = new Func<string * string * bool, unit>(File.Copy)
Async.FromBeginEnd((source, target, overwrite), fn.BeginInvoke, fn.EndInvoke)
let copyfile1 = asyncFileCopy("file1", "file2", true)
let copyfile2 = asyncFileCopy("file3", "file4", true)
[copyfile1; copyfile2] |> seq |> Async.Parallel |> Async.RunSynchronously |> ignore
これはよさそうですね!次の質問:ある時点でスレッドプールの大きさを判断できますか?私はシステムを圧倒することを避けるためにスレッドの使用を制限したいと思います。例えば私が多くのファイルをコピーしていて、かなり大きいファイルがある場合。 5スレッド(任意)を使用したかったとします。何とかそれを見つけることができますか? – user1443098
.NETタスクはThreadPoolを使用します.CLRはタスクを管理し、プール上でスケジュールします。あなたが作成するタスクの数を制限したい場合、このC#の答えは以下のように役立ちます:http://stackoverflow.com/questions/2898609/system-threading-tasks-limit-the-number-of-concurrent-tasks –