我只有一种方法的网络服务。 Web服务工作如此简单。这是我的网络服务代码的一部分:
//submit transaction(s) into the database
Simpay simpay = new Simpay { Account = account, Job = new SystemJob { ID = 0, TypeName = "SimpayHistory" } };
Task.Factory.StartNew<bool>(simpay.AddHistory);
正如您所见,我使用Task.Factory.StartNew
来执行另一个线程中的任务。但有时会发生连线事。让我们假设任务工厂获取线程号300并开始执行其工作。突然另一个请求来了,它采取了相同的线程!!所以我的第一个任务就是取消!!(我不确定它,但它是我在日志中发现的唯一东西!)
现在我想知道这可能吗?我怎么能避免这个?
这是我的日志文件的一部分。因为你可以看到另一个请求来并采取旧的一个线程!!!(第一行属于任务工厂,第二行属于新请求。线程数是345)
[DEBUG];[2015-11-05 07:37:57,526];[345];[DataBase.Query line:56];[2.5646];[];[(Stored Procedure: ud_prc_simPayRetrieveLastTransaction)(Code: 1)(Message: No Error.)(SQL Parameters: @mobileNumber)]
[INFO ];[2015-11-05 07:37:57,667];[345];[Identity.DoesUserNameContentValid line:146];[0.0591];[];[(Message: user name content validation completed successfully.)]
答案 0 :(得分:2)
您正在体验的是Job Skeet所描述的重新入学。我必须推荐你的帖子here。他对此进行了深入的解释。
简短的回答是,未来执行任务有可能劫持现有任务并终止其进程。