時間のかかる方法があります。
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引数をメソッドに追加することです。これは、デフォルトでnullになります(同期呼び出しの場合)。
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マルチスレッドには多くの革新があり、これからやろうとしていることを実行するためのより良い方法だと感じています。ありますか?