0

ユーザーがストアドプロシージャを開始し、そのプロセスが完了するまで待つことなく残りのサイトを使用できるページを作成しようとしています。
私はバックグラウンドワーカースレッドとセカンダリEDMXをこの呼び出し用に作成しようとしましたが、コード実行中にサイトはまだ応答しません(通常1〜2分かかります)。サイトは、ストアドプロシージャの実行を開始した後、ユーザーに応じたままであるように、私は、これは実際に動作して取得するにはどうすればよいASP.NET Entity Framework 6ストアドプロシージャを非同期に実行する

protected void SaveReversal_Click(object sender, EventArgs e) 
    { 
     if (PeriodList.SelectedValue != "") 
     { 
      var bw = new BackgroundWorker(); 
      bw.DoWork += new DoWorkEventHandler(AsyncReverseDataload_DoWork); 
      bw.WorkerReportsProgress = false; 
      bw.WorkerSupportsCancellation = false; 
      bw.RunWorkerAsync(Convert.ToInt32(PeriodList.SelectedValue)); 
     } 
    } 

    private void AsyncReverseDataload_DoWork(object sender, DoWorkEventArgs e) 
    { 
     int TrackerDetailKey = (int)e.Argument; 
     using (AsyncEntities ar = new AsyncEntities()) 
     { 
      IObjectContextAdapter dbcontextadapter = (IObjectContextAdapter)ar; 
      dbcontextadapter.ObjectContext.CommandTimeout = 600; 

      try 
      { 
       var results = ar.ReverseDataload(TrackerDetailKey); 
      } 
      catch (Exception ex) 
      { 
       Console.Write(ex.ToString()); 
      } 
     } 
    } 

+0

メソッドを非同期にしますか? –

答えて

2

あなたは「火と忘れている」状況にある(私はそう思う)1〜2分かかると言うので、

ここにいくつかのオプションがあります:
-ThreadPool using Task.Run、Task.Factory.StartNew etc.しかし、私は本当にこれが悪い考えだと思います! IIS/ASP.NETはアプリケーションをリサイクルする必要があります。このリサイクルが行われたときにバックグラウンドスレッドが実行されている場合、その作業は失われます。

-QueueBackgroundWorkItem、あなたのタスクは30秒バックグラウンドワーカー+最後のチャンス

- 第3パーティのライブラリ "HangFire" Nito.AspNetBackgroundTasksパッケージです

-IRegisteredObjectまで行く場合は、これを使用して、それを使用する方法githubページを確認してください。

-callingページスコープ外のメソッド、つまりasmx/wcfからのメソッドで、プロジェクトに埋め込まれている可能性があります。私は、タスクが「タスクキュー」に直接おWebAppのから追加され、その後、安全に実行することができた上
-consoleアプリや
-Service、ある信頼性の高いソリューションのために行くだろうこれらの全てのほか

そこからログと必要なロジックがあります。

希望すると、これが役立ちます。

+0

ありがとう、そこには多くの良い情報がありました!私はIsOneWayがtrueに設定されたWCFサービスに仕事を振り向けました。ページはそれを呼び出して、ユーザーが通常どおりサイトの残りの部分を引き続き使用できるようにします。 – wham12

+0

よく、歓声:D –

関連する問題