我有一个函数可以生成一些http请求,并在一个任务中运行。 该函数可以在中间中断,因为我不能中止任务,我在函数中添加了一些布尔条件。 例如:
public int foo(ref bool cancel)
{
if(cancel)
{
return null
}
//do some work...
if(cancel)
{
return null
}
//http webrequest
if(cancel)
{
return null
}
}
这个工作非常好,虽然这是一些相当丑陋的代码。
另一个问题是,当我已经执行了Web请求时,我需要时间来获得响应,而不是函数cncelation需要花费很多时间(直到我得到响应)。
我有更好的方法来检查这个吗?或mybe我应该使用线程而不是任务?
修改
我添加了一个取消令牌:声明了一个cancelationTokenSource,并将其令牌传递给任务
CancellationTokenSource cncelToken = new CancellationTokenSource();
Task t = new Task(() => {foo()},cancelToken.token);
当我做cancelToken.Cancel(); 我还在等待回应,并且tsk没有取消。
答案 0 :(得分:1)
任务支持取消 - 请参阅here。
这是一个快速摘录。
class Program
{
static void Main(string[] args)
{
var token = new CancellationTokenSource();
var t = Task.Factory.StartNew(
o =>
{
while (true)
Console.WriteLine("{0}: Processing", DateTime.Now);
}, token);
token.CancelAfter(1000);
t.Wait(token.Token);
}
}
请记住使用提供的取消令牌等待任务。你应该收到一个OperationCanceledException。