2013-10-29 71 views
1

这个问题很简单,它是为了可读性。我只想知道天气下面的代码行有其他选择吗?该代码在可读性和风格方面是否正确?如何初始化任务对象?

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

编辑:当某些条件/规则满足

这个任务会被创建。在这种情况下,我会给这个班级分配一个Action

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

感谢

+0

所以你的问题是:“这是在C#中表达一个没有操作任务的惯用方法吗?” –

+0

是的。我想初始化何时需要而不运行 –

+0

那么现在你的问题是什么? –

回答

1

任务对象是不是意味着要运行多次,启动和停止的意愿。如果您取消某项任务或完成任务,则在下次希望再次执行时创建新的Task对象。您可以保留对任务对象的引用,并使用CancellationTokenSource取消它。

我建议简单地跟踪任务是由bool变量还是由Task变量本身运行,其中null值表示任务未运行。例如:

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 
    } 
}