問題

問題:

私は非同期結果タイプを返す関数をモデル化する方法を理解するのに苦労しています。

例:

 type Get<'requestor,'item,'error> = 'requestor -> Async<Result<'item list,'error>>
 

注:

私はF#関数型に依存するC#コードを書く必要があるまで、この問題に遭遇しませんでした。したがって、私のC#コードはIOを実行しており、その結果タスクタイプを使用したいと考えています。

失敗しました Attempt:

私は慣用的なF#コードを書いて、私のF#シグネチャ全体にC#タスクタイプを振りかけたくありません。

たとえば、私はこれをしたくありません:

 type Get<'requestor,'item,'error> = 'requestor -> Task<Result<'item list,'error>>
 

私の挑戦は、私が戻る方法を考え出していないことです:

 Async<Result<'item list,'error>>
 

私の失敗の例を次に示します。

 let someLongRunningOperation = async { Ok [1] } // Returns Async<unit> instead of AsyncResult
 

結論:

結論として、次の失敗した例を参照するAsync Result型を返すにはどうすればよいですか。

 let someLongRunningOperation = async { Ok [1] }
 

  ベストアンサー

計算式の中で、returnキーワードを使用して、そのCEの型の値をラップする必要があります。だからこれ:

 let someLongRunningOperation = async { Ok [1] }
 

これを修正する必要があります:

 let someLongRunningOperation = async { return Ok [1] }
 

そして、Async<Result>を返します。

  同じタグがついた質問を見る

f#