1

この質問は些細なことであり、読みやすくするためのものです。次のコード行に代替手段があるかどうかを知りたいのですが?そのコードは読みやすさとスタイルの点で正しいですか?

Task newTask = new Task(() => { });

編集:

このタスクは、特定の条件/ルールが満たされたときに作成されます。Actionその場合、このクラスにを割り当てます。

if(condition Met && newTask.Status != TaskStatus.Running )
{
  newTask = Task.Factory.StartNew(Action);
  }

ありがとう

4

1 に答える 1

1

Task オブジェクトは、複数回実行したり、自由に開始および停止したりすることを意図したものではありません。タスクをキャンセルするか、完了まで実行する場合は、次にそのタスクを再度実行するときに新しい Task オブジェクトを作成する必要があります。タスク オブジェクトへの参照を保持し、CancellationTokenSource.

タスクが bool 変数によって実行されているか、null 値がタスクが実行されていないことを示す Task 変数自体によって実行されているかを単純に追跡することをお勧めします。例えば:

private CancellationTokenSource _tokenSource = new CancellationTokenSource();
private Task _task;

public void StartDoingSomething()
{
    if (_task == null)
    {
        _task = Task.Factory.StartNew(Worker, _tokenSource.Token)
                            .ContinueWith(_ => _task = null);
    }
}

public void StopDoingSomething()
{
    if (_task != null)
    {
        _tokenSource.Cancel();
    }
}

private void Worker()
{
    while (!_tokenSource.IsCancellationRequested)
    {
        // Do some unit of work
    }
}
于 2013-10-29T14:36:21.923 に答える