Taskには処理が終わったかどうかを返すIsCompletedプロパティがあります。
Taskの処理が終わるまで待機するWaitメソッドもあります。
この辺を組み合わせると、Whileループで処理中には再実行不可できますし、実行完了後に処理を加えたりできます。
private bool stop;
private Task someTask = Task.CompletedTask;
public void StartMethod()
{
if(!this.someTask.IsCompleted)
{
return;
}
this.someTask = Task.Run( () =>
{
while(!stop)
{
Something();
}
});
}
public void StopMethod()
{
this.stop = true;
this.captureTask.Wait();
this.stop = false;
}
コメント