私はこのように、これらのもののための非同期バージョンを含むいくつかの方法でリポジトリを生成しようとしているとしています:非同期式はC#
長所は何と:
//Method 1
public static List<MyEntity> GetMyEntityByDate(MyContextType context)
{
var tmpMov = context.MyEntity
.AsNoTracking()
.ToList();
return tmpMov;
}
//Method 2 V1
public async static List<MyEntity> GetMyEntityByDateAsync(MyContextType context)
{
var tmpMov = await context.MyEntity
.AsNoTracking()
.ToListAsync();
return tmpMov;
}
//Method 2 V2
public async static List<MyEntity> GetMyEntityByDateAsync(MyContextType context)
{
List<MyEntity> tmpMov = null;
await Task.Factory.StartNew(() => {
tmpMov = GetMyEntityByDate(context);
});
return tmpMov;
}
は今、私はいくつかの質問を持っていますパフォーマンスと流暢性の観点から、方法2 V1対方法2 V2を使用するのはどうですか?
私はリポジトリパターンを実装しているので、少ないコードを書きたいと思っています。これは、私がV2を検討している理由です。
しかし、私はの非同期で貧弱な経験があり、私の目標は邪悪なものです。
V1データベースクエリを(理由ToListAsyncの)際V2はので、実際には非同期のいずれかの利点を使用しませんしません(プラススレッドプールをブロックしながら、async IOの活用しますレスポンスを待っている間は何もしません)。要するに、V2については忘れてV1を使用してください。 – Evk
最初は 'sync'の方法です.2番目の場合は、非同期でリストに変換するだけで、大きな利益は得られません。また、2v2では非同期オーバーシンクと呼ばれるので、TaskよりTask.FromResult()を使う方が良いです。 Factory.StartNew() ' – Fabjan
'最高のパフォーマンス '<=はパフォーマンスを定義しますか?これがWebサーバー用で、要求を処理できるスレッドの数を最大にしたい場合は、v2( 'ToListAsync'を使用)が最適です。一般的なオーバーヘッド(Webフォームやコンソールアプリケーションの場合)を参照している場合、v1はおそらくより良い一致です。 V3は全く考慮されてはいけません。 – Igor