我的代码是:
if (save)
{
request.DataMessage = base.SaveChanges();
if (request.DataMessage.IsSuccess)
{
request.CustomID = arRequest.CustomID;
Task.Run(() => TaskWriteARAddLog(request, arTimestamp, arRequest, _tModel));
}
}
当单个用户在我的应用程序上工作时,我没有遇到任何问题,但是当多个用户正在工作时,我遇到了这个问题: "不允许新事务,因为会话中正在运行其他线程。"
答案 0 :(得分:0)
您可以使用lock语句创建一个关键部分,以便一次只能由一个线程执行代码块。
lock(_lockingObject)
{
request.DataMessage = base.SaveChanges();
if (request.DataMessage.IsSuccess)
{
request.CustomID = arRequest.CustomID;
Task.Run(() => TaskWriteARAddLog(request, arTimestamp, arRequest, _tModel));
}
}
//where _lockingObject is a field on your class:
object _lockingObject =new object();
Here is a link您可以在其中了解lock语句的工作原理。
如果必须使用Task.Run(),代码应该等到任务完成。
var task = Task.Run(...);
task.Wait();
// or
Task.Run(...).Wait();
希望这有帮助。