//呼び出すタスク式(3を返す)
let BaseTask()=task{return 3}
//①ValueTask<>を使用する
let VT=BaseTask()|>ValueTask<int>
printfn "VT=%d" VT //出力結果:VT=3
//②Resultメソッドを使用する
let Res=BaseTask().Result
printfn "Res=%d" Res //出力結果:Res=3
必要に応じてスレッドプールを切り替える「backgroundTask」というのもサポートしています
タスク式で使えるAsyncメソッド
タスク式に対応しているAsyncメソッドがいくつかあります
Async.StartImmediateAsTask
非同期式を現在のスレッドからタスクとして開始します
//構文:Async.StartImmediateAsTask <非同期式> (キャンセルトークン)
//例:3秒後に30を返す非同期式をタスクとして実行
let back30= //back30に非同期式の割り当て
async{
do! Async.Sleep 3000
printfn "30を返します"
return 30
}
//呼び出し
let num=(back30|>Async.StartImmediateAsTask).Result
printfn "num=%d" num //出力結果:30
Async.StartChildAsTask
非同期式内で別の非同期式をタスクとして実行するときに使用するときに使用します
//構文:Async.StartChildAsTask <非同期式>
//例:
let child=
async{
do! Async.Sleep 2000
printfn "childが呼び出されました"
return ()
}
let call=
async{
Async.StartChildAsTask child|>Async.Ignore
}