在C#中完成任务时停止线程

时间:2015-10-16 12:20:33

标签: c# asp.net-mvc concurrency

我的代码是:

if (save)
            {
                request.DataMessage = base.SaveChanges();
                if (request.DataMessage.IsSuccess)
                {
                    request.CustomID = arRequest.CustomID;                        
                    Task.Run(() => TaskWriteARAddLog(request, arTimestamp, arRequest, _tModel));

                }
            }

当单个用户在我的应用程序上工作时,我没有遇到任何问题,但是当多个用户正在工作时,我遇到了这个问题: "不允许新事务,因为会话中正在运行其他线程。"

1 个答案:

答案 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();

希望这有帮助。