this questionを読んだことがありますが、Result
プロパティを使用する必要がないため、私の場合は簡単です。だから私はスティーブン・クレアリーの答えより簡単なアプローチで行くことができるのだろうかと思っていた。タスクをタスク<T>に変換する(返品タイプがTのラップタスク)
私はこの単純なインターフェースを持っているとします。
このインターフェイスは、オブジェクトを非同期にロードするためのメソッドを提供します。ロード結果がオブジェクト自体であるため、何も戻されません。
(インターフェイスが内部であり、そのため、実装の公開を回避するために明示的に実施。)
ここでは、私はバイナリデータをロードする方法です。
data = new BinaryData();
await ((IBinaryDataReadable)data).Load(reader);
私は、これは、より流暢と冗長ようにしたいので、私はこの拡張方法
internal static Task<TData> Load<TData>(this TData data, AsyncDataReader reader)
where TData : IBinaryDataReadable
=> data.Load(reader).ContinueWith(t => data, TaskContinuationOptions.ExecuteSynchronously);
今すぐ読み込み、書き込みは次のようになります。
data = await new BinaryData().Load(reader);
ここでは、このメソッドの使用について心配する必要がありますか?たとえば例外処理などですか?非同期を使用して行うことができ
ありがとうございました。 async/awaitの使用を避ける理由は、非常に基本的なタスクのための状態マシンオーバーヘッドの生成を防ぐことでしたが、これはContinueWithの使用が問題を引き起こすかどうかを知りたかった良い解決策です。 –
@ M.kazemAkhgary、いいえ、例外を摘出できないということを除いては何の問題も導入していません – Nkosi