我有一些耗時的方法:使異步代碼撤銷
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