この警告は非常に明確である - あなたは非同期タスクを開始しているが、あなたはそれが完全なときに通知されるためのメカニズムを持っていません。もしあなたがなら、はそれがいつ終わったかを知る必要がありますか?あなたの方法から戻る前に、またはデータがDBと同期していることを確認する必要がある時点で?
await
操作は、データを保存している間は、独立した処理を停止したくないことを保証するための1つの方法です。 await
は非同期であり、並列性ではありません。
さらに、保存タスクを実行すると、DBによってスローされた例外を確実にキャッチできます。単純にタスクを解放すると例外が失われます。例外的に例外をスローする観察されないタスクを処理するには、最高でもTaskScheduler.UnobservedTaskException
を処理できますが、単純にを参照してタスクを観察してください。
あなたが知っているように、タスクを観察する1つの方法はawait
です。もう一つは、SaveChangesAsync
が変数に返すTask
オブジェクトを単に保存することです。これにより、後でそのタスクのawait
(またはWait()
)に例外が発生します(await
コールを試すか捕まえるか、またはタスクにContinueWith
をつけることによって)、コンパイラはあなたがそのタスクを放棄していないことを容易に知ることができます。仕事はその運命へ:
//a lot of database dependant processing
var dbSaveTask = db.SaveChangesAsync(); //asynchronouly saving database changes
//a lot of ANOTHER long term database INDEPENDANT stuff
// now, before assuming the DB is up to date, ensure the TAsk is complete.
await dbSaveTask;
// now do something Db-dependent!
私はあなたが 'await'が実際にここでやっていることを理解しているとは思わない。あなたがそれを待たずに済むと、実際に仕事をする前に終了するかもしれません。また、 'await'はメソッドが次の行に移動する前に完了するのを待つことを意味しません。 – DavidG
私は、パラレルと非同期という2つの異なるコンセプトを混在させていたと思います。私はこのスレッドを読んでいたhttp://stackoverflow.com/questions/4844637/what-is-the-difference-between-concurrency-parallelism-and-asynchronous-methodsどのように私はWindowsフォームアプリケーションでいくつかの応答性を得ることができる把握する。しかし、私はまだasp.net MVCアプリケーションで何らかのパフォーマンスを得ることができるかどうかを判断できません。 –