我有一些耗时的方法:使异步代码撤销
public class TimeConsumingClass
{
public void TimeConsumingMethod()
{
//let's imagine my method works this way
for (var i = 0; i < 10000; i++)
Thread.Sleep();
}
}
它在主线程之前执行的。然后我需要调用它在辅助线程不阻塞UI:
Task.Factory.StartNew(() => { new TimeConsumingClass().TimeConsumingMethod(); });
现在我需要能够随时停止此方法。所以我想让我的方法以某种方式对待CancellationToken,同时我想保持同步调用此方法的可能性(不使用CancellationToken)。最好的办法我来是添加可选的CancellationToken参数我的方法,这将是空的默认值(同步调用):
public class TimeConsumingClass
{
public void TimeConsumingMethod(CancellationToken cancellationToken = null)
{
//let's imagine my method works this way
for (var i = 0; i < 10000; i++)
{
if (cancellationToken.IsCancellationRequested)
return;
Thread.Sleep();
}
}
}
但是有很多在.NET多线程创新的最近,我有感觉这是一个更好的方式去做我将要做的事情。有一个吗?
不知道工作量是* *实际上**由Thread_Sleep表示,这是一个最佳解决方案。 – spender 2013-03-15 17:50:06
你的问题是关于使*异步*代码可以取消......但这看起来完全与我同步。你能澄清一下吗? – 2013-03-15 17:50:16
@JonSkeet,异步我的意思是我的代码在非主线程 – SiberianGuy 2013-03-15 17:52:05