我有一些耗时的方法:
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 多线程有很多创新,我觉得这是一种更好的方式来完成我将要做的事情。有吗?