.Net 4.0 VS2010 環境の MVC 4 でプロジェクトを実行しています。ユーザーをフロントエンドで長時間待たせることなく、長時間実行されるSQLタスクを処理する必要があります。MVC 4 Web アプリケーションは、以下のコード スニペットを使用して SP を実行するデータ レイヤー メソッドを呼び出すビジネス レイヤーを呼び出します。
public DataSet ExecuteSP()
{
dbc = database.GetStoredProcCommand('long_running_sp');
dbc.CommandTimeout = 300;
foreach (SPParams p in spParams)
{
dbc.Parameters.Add(new SqlParameter(p.ParamName, p.ParamValue));
}
DataSet ds = _database.ExecuteDataSet(dbc);
return ds;
}
私が試した 2 つのオプションは、明らかに機能しない同期コントローラーを使用するもので、もう 1 つは AsyncController を使用するものでした。ストアド プロシージャの呼び出しがデータ層で行われた後、両方のオプションで Web サイトがハングしたことがわかりました。次に、AsyncController に Task.Factory.StartNew メソッドを導入しました。出来た。次に、同期コントローラーに同じものを適用しましたが、そこでも機能しました。
問題は、適用する必要があるのが Task.Factory.StartNew だけである場合、なぜわざわざ AsyncController を使用するのかということです。または、Task.Factory.StartNew を完全に捨てて、Service Broker Activationを使用してください。
ここでより良いオプションは何ですか?