这可能会在别处讨论,但我找不到。我有一个.Net Web服务,它具有循环日期范围的函数,并在数据库中运行计算和更新记录。如果您将此功能赋予较长的日期范围,则可能需要相当长的时间才能完成。在这种情况下,我需要一种方法来阻止这个功能。
是否有一种方法可以在已识别的线程中运行Web服务函数调用,以便在需要时可以取消该线程?或者我是在思考这个?我正在使用带有jQuery的C#.Net Web页面来执行对Web服务功能的AJAX调用。任何帮助将不胜感激。
答案 0 :(得分:1)
为您的Web服务添加一个Cancel()方法,用于设置状态变量。然后,只需让你的长时间运行操作定期检查这个变量并停止它的设置(当然有适当的保护)。
答案 1 :(得分:1)
您需要网络服务方法:
“长时间运行”的实施取决于您的服务主机(IIS,Windows服务等)。
答案 2 :(得分:0)
当然,你可以做到。如果您使用的是.NET 4,则可以轻松取消任务:
CancellationTokenSource cts = new CancellationTokenSource();
var processingTask = Task.Factory.StartNew(() =>
{
foreach(var item in StuffToProcess())
{
cts.Token.ThrowIfCancellationRequested();
// Do your processing in a loop
}
});
var cancelTask = Task.Factory.StartNew(() =>
{
Thread.Sleep(/* The time you want to allow before cancelling your processing */);
cts.Cancel();
});
try
{
Task.WaitAll(processingTask, cancelTask);
}
catch(AggregateException ae)
{
ae.Flatten().Handle(x =>
{
if(x is OperationCanceledException)
{
// Do Anything you need to do when the task was canceled.
return true;
}
// return false on any unhandled exceptions, true for handled ones
});
}