1

这个问题是微不足道的,它是为了可读性。我只想知道天气下面这行代码有什么替代方法吗?该代码在可读性和风格方面是否正确?

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

编辑:

此任务将在满足某些条件/规则时创建。在那种情况下,我会分配一个Action给这个类。

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

谢谢

4

1 回答 1

1

任务对象并不意味着可以多次运行并随意启动和停止。如果您取消一个任务或它运行完成,您将在下次想要再次执行它时创建一个新的任务对象。您可以保留对任务对象的引用并使用CancellationTokenSource.

我建议简单地跟踪任务是否由布尔变量或任务变量本身运行,其中空值表示任务未运行。例如:

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 回答