小编BAl*_*lan的帖子

在函数内执行存储过程而不等待返回

我知道某个地方我可能忽略了某些东西,但我正在尝试修复一个我没有开发但通常不会维护的应用程序,所以如果我直截了当地犯错,请提前原谅我.

这个web-app目前存在一个问题,即在执行某个函数时导致超时,我已将其追溯到一件事,它正在执行存储过程并期望存储过程返回受影响的行数,这一切都很好,花花公子.但是,此存储过程至少运行50秒并导致超时.此外,我不希望UI在50秒内挂起,而这只是根据已更改的信息更新数据库中的某些状态字段,它返回的内容对最终用户没用,所以它只是需要被触发和忘记,以便用户可以继续使用该应用程序.

我已经尝试了创建任务和创建线程,并且由于某种原因,该函数坚持等待这个完成.

这是调用存储过程的函数:

 public static void UpdateComputerStatusByApplicationID(int ApplicationID)
{
    using (SqlConnection Conn = new SqlConnection(GlobalMethods.CONNECTION_STRING))
    {
        SqlCommand Cmd = new SqlCommand("UpdateComputerStatusByApplicationId", Conn);
        Cmd.CommandType = CommandType.StoredProcedure;
        Cmd.Parameters.Add("@applicationid", SqlDbType.Int).Value = ApplicationID;

        Conn.Open();
        Cmd.ExecuteNonQuery();
        Conn.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

而异常来自Cmd.ExecuteNonQuery(); 这是一个超时异常.

这是我从函数中将其称为任务的地方:

public void UpdateApplication(a_Applications newApplication, XPToWin7 xpToWin7)
    {
        try
        {
            var orginalApplication = GetApplication(newApplication.AutoNumber);
            ObjectContext.ApplyCurrentValues(orginalApplication.EntityKey.EntitySetName, newApplication);

            if (xpToWin7 != null)
            {
                UnlinkXPAppWithWin7App(orginalApplication.AutoNumber);
                LinkXPAppWithWin7App(orginalApplication.AutoNumber, xpToWin7);
            }

            Task UpdateComputerStatus = Task.Factory.StartNew(() =>
            {
                DAL.UpdateComputerStatusByApplicationID(orginalApplication.AutoNumber);
            }, TaskCreationOptions.LongRunning);

            SaveChanges();
        }
        catch (Exception ex)
        {
            throw new Exception("Exception …
Run Code Online (Sandbox Code Playgroud)

c# sql asp.net stored-procedures

3
推荐指数
1
解决办法
9751
查看次数

标签 统计

asp.net ×1

c# ×1

sql ×1

stored-procedures ×1