【发布时间】:2016-03-06 00:21:59
【问题描述】:
我有一个方法
public void AddOrUpdateAnswer ( AnswerSubmission Answer, Guid pid )
{
this._Conn.Open();
using (SqlCommand cmd = new SqlCommand("AddOrUpdateAnswer", this._Conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@AnswerVal", Answer.AnswerVal);
cmd.Parameters.AddWithValue("@QuestionId", Answer.QuestionId);
cmd.Parameters.AddWithValue("@PartnerId", pid);
cmd.ExecuteNonQuery();
}
this._Conn.Close();
}
我需要将其转换为异步任务,因为我发现每当我有多个用户一次主动提交答案时,它就会使我的 Web 应用程序 (502 Bad Gateway) 崩溃。所以我知道我需要做的就是让这个 who thing 成为一个异步方法。目前,它被我的控制器调用,如
[HttpPost]
public ActionResult SubmitAnswer ( AnswerSubmission Answer, Guid pid)
{
bool goodSoFar = true;
string status = "Answers submitted successfully";
try
{
this._Db.AddOrUpdateAnswer(Answer, pid);
}
catch (Exception e)
{
goodSoFar = false;
status = String.Format("Exception occured during answer submission: {0}", e.Message);
}
return Json(new { Succeeded = goodSoFar, Message = status });
}
所以我认为我需要做的就是做到这一点 喜欢
[HttpPost]
public async Task<ActionResult> SubmitAnswer ( AnswerSubmission Answer, Guid pid)
{
bool goodSoFar = true;
string status = "Answers submitted successfully";
try
{
await this._Db.AddOrUpdateAnswer(Answer, pid);
}
catch (Exception e)
{
goodSoFar = false;
status = String.Format("Exception occured during answer submission: {0}", e.Message);
}
return Json(new { Succeeded = goodSoFar, Message = status });
}
但是我该怎么处理AddOrUpdateAnswer?我尝试将其更改为
public Task AddOrUpdateAnswer
但后来我得到了不是所有路径都返回值的错误。我应该返回什么?
【问题讨论】:
-
async不会改变您的网络应用程序的语义。如果您获得带有同步代码的 502,那么您将获得带有异步代码的 502。
标签: c# asp.net ajax asynchronous thread-safety