2

Programming F# bookを使用すると、最初にシリアルとして指定された例があります。

let result1 = longTask1()
let result2= = LongTask2()

次に、PFXを使用して、

Open System.Threading.Tasks

let taskBody = new Func<string>(longTask1)
let task = Task.Factory.StartNew<string>(taskBody)

let result2 = longTask2()
let result1 = task.Result

ただし、私の場合、関数readBlockは文字列filePathを引数として受け取り、seq. 私はこのようにしてみました

let taskBody = new System.Func<string, seq<_>>(readBlock)
let task = Task.Factory.StartNew<seq<_>>(taskBody.Invoke(filePath))

これは、Task.Factory.StartNew 部分のエラーを示しています - 引数が多すぎます。では、値を返すパラメータ化された関数を呼び出すにはどうすればよいでしょうか?

4

1 に答える 1

2

本のコードはかなり時代遅れです。この本は VS 2010 のリリース前に書かれたもので、F# と PFX の一部はまだ解決されていません。

これで、次のように記述できます。

let task = Task.Factory.StartNew(fun () -> readBlock(filePath))

型チェッカーは の適切な型を推測します。後でtask呼び出して結果を取得できます。task.Result

クロージャーと の間に暗黙の変換がありSystem.Func<_, _>、この場合、クロージャーを使用すると読みやすくなります。

于 2012-06-27T06:53:03.020 に答える