Entity Frameworkは、ストアドプロシージャをDbContextクラスのメソッドとしてインポートします。 しかし、それらは非同期ではなく、スレッドをブロックすることなく、非同期WebApiコントローラから呼び出すことができます。私は非同期ラッパーメソッドを書いていますが、Visual Studioが私に与える警告によって混乱します。同期コードの非同期実行
このコードは非同期で実行されますか?このコールが、私は提案に従っている場合、コールがしかし
を完了する前に、現在のスレッドの実行が続く、待望されていないので
:
public async Task AttachTypeToMeetingTime(int meetingTimeId,int meetingTypeId) { await Task.Run(() => { //synchronous method generated by EF. //VS warning here AttachTypeToMeetingTime(meetingTimeId, meetingTypeId); }); }
Visual Studioは、私に警告を与えます赤色で下線が引かれ、コンパイルされません。
呼び出しが完了する前に現在のスレッドを続行しないようにしますか?
サイドノート:私はあなたが何をあなたが実際にだけやろうとしていると、パフォーマンスが低下することを理解してほしい - 代わりにリクエストを処理スレッドプールからスレッドを1つ持つのあなたは今、別のスレッドプールのスレッドに作業をシフトし、コンテキストスイッチ/スレッドを支払います同期(さらにそのスレッドは文化/現在の要求で設定されていないし、後ですべての種類の楽しみを与える) –
@AlexeiLevenkov申し訳ありません、私はそれを前に見てきました。解決セクションをそれ自身の答えに移動しました。私は、非同期コントローラメソッドや、 'FindAsync()'のようなバニラEF非同期メソッドとどう違うのですか? –
真の非同期メソッドはスレッド上でビジー待機を行いません(同期一回と異なります)。 asyncについては、[同期メソッドの非同期ラッパーを公開する必要がありますか?](http://blogs.msdn.com/b/pfxteam/archive/2012/03/24/10287244.aspx)の一般的な記事を読んでみてください。出発点。 –