2012-05-03 14 views
2

セットアップはかなり標準です。ビューとSQL Server接続文字列を含むリポジトリを作成しました。リポジトリをビューモデルに渡し、ビューモデルのコンストラクタでリポジトリからコレクションを呼び出します。 async/awaitコンボを使用して非同期に処理しようとするまでは問題なく動作していましたが、リポジトリのコレクションを呼び出すときに "モデルを作成している間はコンテキストを使用できません"というエラーが表示されます。EF + async =モデルの作成中にコンテキストを使用できません。

旧作業コード:

void FillPeopleList() 
{ 
    PeopleList = _repository.GetPeople(); 
} 

新壊れコード:

async void FillPeopleList() 
{ 
    await Task.Run(()=> 
    { 
    PeopleList = _repository.GetPeople(); // Error 
    }); 
} 

答えて

9

EFは、スレッドセーフではありません。

複数のスレッドで同じコンテキストを使用することはできません。

+0

しかし、async/awaitは別のスレッドをスピンオフしません。 – Manuel

+0

@Manuel:正しい。別のスレッドで実行される 'Task.Run'です。それはどう思いますか? – SLaks

+0

メソッドをタスクにラップします。それでは、どうすればvoidメソッドを実行できますか? (新しいスレッドを回さずに) – Manuel

関連する問題