2017-02-17 17 views
3

私の質問は、私は、読み取りを実行したり、私のメソッドを非同期に行うためにTask.Run以内に書く場合、それはコードの通常のビットと同じように動作する、シンプルで、またはこのような行為を禁止EF内の何かがあるのでしょうか?例えばEntity Framework 6は通常Task.Run()ステートメント内で機能しますか?

await Task.Run(() => 
{ 
    var data = _context.KittenLog.ToList(); 
} 

私はこれを行うことはワームの缶を開けるだろうという不安感を持っていますが、私は2つを組み合わせることについてGoogleで何かを見つけることができません。

+3

コードを実行して調べます。結局あなたはすでにそれを書いてきました。もちろん、最初にこれを行うのは正当な理由はありませんが、十分に簡単にできるかどうかはまだ分かります。 – Servy

+0

すべてのコードは基本的に、データベースからのデータをスレッドプールスレッドに取得するクエリをプッシュすることです。また、EFクエリは任意のスレッドで発行される可能性がありますが、なぜこれは機能しませんか? – mm8

+0

私はそれを実行する場合、それは動作すると確信しています。しかし、デッドロック・タイプの問題や挿入に問題がある可能性があります。基本的に私はそれがタスクセーフであるかどうか尋ねています。スレッドセーフであるかどうかは、何回かテストするだけで判断できません。タスクが同じであると思われます。 – NibblyPig

答えて

5

はい、できます。しかし、それはネイティブ非同期サポートを持っているので、参照Task.Runへの呼び出しでそれをラップする必要はありませんhttps://msdn.microsoft.com/en-us/library/jj819165(v=vs.113).aspx#Makingそれ非同期

あなたはそれが何かのようになります場合は、考慮すべき

var data = await _context.KittenLog.ToListAsync(CancellationToken.None); 

ありますいくつかのもの。コンテキストと同様に、一度に1つの非同期操作しか処理できません。

+0

感謝を使うような、より効率的な – NibblyPig

関連する問題