如何初始化任务对象

本文关键字:对象 任务 初始化 | 更新日期: 2023-09-27 18:37:22

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

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

编辑:

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

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

谢谢

如何初始化任务对象

任务对象并不意味着可以多次运行并随意启动和停止。 如果您取消任务或它运行到完成,则下次要再次执行它时,您将创建一个新的 Task 对象。 您可以保留对任务对象的引用,并使用 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
    }
}