1
我有一个函数,使一个新的HTTP请求,并在任务运行。 该函数可以在中间被中断,因为我不能中止任务,我在函数中添加了一些布尔条件。 例如:取消功能
public int foo(ref bool cancel)
{
if(cancel)
{
return null
}
//do some work...
if(cancel)
{
return null
}
//http webrequest
if(cancel)
{
return null
}
}
thisworked相当不错的,虽然这是相当一些丑陋的代码。
另一个问题是,当我已经执行的Web请求,这需要时间,我得到比功能cncelation的反应需要大量的时间(直到我得到回应)。
有没有更好的办法,我检查这个?或mybe我应该使用线程而不是任务?
编辑
我添加了一个取消令牌:宣布cancelationTokenSource,并通过它的令牌任务
CancellationTokenSource cncelToken = new CancellationTokenSource();
Task t = new Task(() => {foo()},cancelToken.token);
当我这样做cancelToken.Cancel(); 我还在等待回应,而且tsk并未取消。
什么奇妙的完整,很好地解释了答案! – RMalke 2013-03-22 17:52:58
但它与我的解决方案相似。只有我的任务调用一个函数,并且该函数不知道取消令牌。我仍然必须检查是否要求取消。我可以使用一个cancelation令牌,但是我仍然不得不等待回复。我想在此之前取消它。 – alostr 2013-03-22 17:54:56
不是真的 - 需要轮询取消令牌只有当您有一些清理执行。如果没有任何清理任务将悄悄停止执行您的代码。 – Ani 2013-03-22 18:27:04