【发布时间】:2020-04-07 04:37:53
【问题描述】:
我有一段用 c# 编写的对数据进行一些处理的代码。
string status;
log.Info("Starting the Process");
StartProcessing(); // takes 10-12 mins usually
var task = Task.Run(() =>
{
do
{
status = GetStatus();
log.Info("Status inside loop : " + status);
} while (status != "Complete")
});
if (task.Wait(TimeSpan.FromMinutes(Convert.ToDouble(15))))
{
log.Info("Processing finished");
}
else
{
log.Info("Process did not complete in 15 mins");
log.Info("Stopping the Process");
StopProcessing(); // this takes 2-3 mins usually.
log.Info("Process stopped");
}
StartProcessing() 方法实际上是对数据进行一些后台处理。它不返回任何值或等待方法完成。所以我们添加了一个do-while循环来检查处理的状态。如果状态为 complete ,则退出循环并继续进行。
现在要求已更改为处理超时。如果处理时间超过 5 分钟,那么我们必须停止该过程。因此,我将代码包装在 Task.Run 中,如上所示,并编写了一个 if else 条件来检查时间。
这似乎没有按预期工作,因为当我运行我的代码时,这是我得到的日志信息。
Starting the Process
Status inside loop : Processing
Status inside loop : Processing
Status inside loop : Processing
Status inside loop : Processing --> this line is repeated multiple times with in 15 mins.
Process did not complete in 15 mins.
Stopping the Process
Status inside loop : Processing
Status inside loop : Processing
Status inside loop : Processing --> why is it going back to do while after coming out ?
Process stopped
即使在出来之后,执行也会回到执行状态。我在这里做错了什么吗?
任何建议都非常有帮助。
【问题讨论】:
-
不是一个直接的答案,但您可能会发现这个库很有用:github.com/App-vNext/Polly
-
问题在于您只是在等待任务,而不是取消它。网站上有许多现有问题的答案,这些问题涉及如何正确取消一项任务。查看标记为一对的重复项。