task.factory.startnew线程取消另一个提交请求

时间:2015-11-06 14:06:13

标签: c# multithreading

我只有一种方法的网络服务。 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.)]

1 个答案:

答案 0 :(得分:2)

您正在体验的是Job Skeet所描述的重新入学。我必须推荐你的帖子here。他对此进行了深入的解释。

简短的回答是,未来执行任务有可能劫持现有任务并终止其进程。