2013-10-29 107 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 
    } 
}