2016-05-15 4 views
0

現在のニーズに応じてさまざまなユーザーをシードしようとしています。 MVC4ではこれがうまく動作しませんでした。 MVC6にAsyncが必要になったので、13人以上のユーザーをシードしようとすると失敗を続けます。MVC 6ループ内のユーザーをシードすることは、14番目のユーザーが常に破棄して、廃棄オブジェクトにアクセスできない。

BatchRegister(300); 
public async void BatchRegister(int users = 0, int n = 1) 
    { 

     Random rnd = new Random(); 
      while (n <= users) 
      { 
       string password = "T3sT*" + rnd.Next(1, 99).ToString(); 
       string usernm = "Test" + n.ToString(); 
       Debug.WriteLine("Going to register user" + usernm); 
       var user = new ApplicationUser { UserName = usernm, Email = usernm + "@noemail.com" }; 
       var result = await _userManager.CreateAsync(user, password); 
       if (result.Succeeded) 
       { 
        Debug.WriteLine("Registered User " + usernm + " " + password); 
       } 
       n++; 
      } 
    } 

最初の13人のユーザーのためだけで罰金以上のラン:私はここに300人のユーザーを登録しようとしています

 [FromServices] 
     public DecAppContext DecAppContext { get; set; } 

     private readonly UserManager<ApplicationUser> _userManager; 
     private readonly SignInManager<ApplicationUser> _signInManager; 
     private readonly IEmailSender _emailSender; 
     private readonly ISmsSender _smsSender; 
     private readonly ApplicationDbContext _applicationDbContext; 
     private static bool _databaseChecked; 

     public AccountController(
      UserManager<ApplicationUser> userManager, 
      SignInManager<ApplicationUser> signInManager, 
      IEmailSender emailSender, 
      ISmsSender smsSender, 
      ApplicationDbContext applicationDbContext) 
     { 
      _userManager = userManager; 
      _signInManager = signInManager; 
      _emailSender = emailSender; 
      _smsSender = smsSender; 
      _applicationDbContext = applicationDbContext; 
     } ... 

:私は標準RC1最終AccountControllerテンプレートを使用しています。彼らはDBにあり、私はアカウントでログインできます。これが起こっていると解決策は次のようになり、なぜ

"Cannot access a disposed object.\r\nObject name: 'UserStore`3'."

理解する上で任意のヘルプ:私はVAR結果に13の以上のユーザープログラムがクラッシュして入力した場合は、=エラーと_userManager.CreateAsync(ユーザー、パスワード)を待ちますとても有難い。これらを行単位で入力することは可能ではありません。いくつかのテストでは、私は2000人のユーザーを入力する必要があります。

答えて

0

問題が見つかりました。 awaitキーワードを使わずに別のメソッドでバッチ・レジスタを呼び出すと、ビューがレンダリングされて動作が停止したように見えます。私はBatchRegister方法が行われていたまでBatchRegister方法でのawaitが進むからビューへの呼び出しを防ぐだろうと思った

await BatchRegister(300); 

:私はへの呼び出しを変更しました。しかし明らかにそれはしません。呼び出しメソッドが完了するまで待機するように、呼び出しメソッドに待機するように指示する必要があります。私は明らかにまだ非同期プログラミングのいくつかの概念が欠けています。私は、待っているのは、バックグラウンドで何かを待っているのを待たずに済むようにすることだと思いました。私はその思考をさらに研究することに戻ります。

関連する問題