C# 如何初始化任务对象?
这个问题无关紧要,是为了可读性。我只想知道下面这行代码是否还有其他选择?代码的可读性和风格是否正确C# 如何初始化任务对象?,c#,.net,styles,code-readability,C#,.net,Styles,Code Readability,这个问题无关紧要,是为了可读性。我只想知道下面这行代码是否还有其他选择?代码的可读性和风格是否正确 Task newTask = new Task(() => { }); 编辑: 当满足特定条件/规则时,将创建此任务。在这种情况下,我会给这个类分配一个操作 if(condition Met && newTask.Status != TaskStatus.Running ) { newTask = Task.Factory.StartNew(Action); }
Task newTask = new Task(() => { });
编辑:
当满足特定条件/规则时,将创建此任务。在这种情况下,我会给这个类分配一个操作
if(condition Met && newTask.Status != TaskStatus.Running )
{
newTask = Task.Factory.StartNew(Action);
}
谢谢一个任务对象并不意味着可以多次运行,也不意味着可以随意启动和停止。如果取消某个任务或该任务运行至完成,则意味着您要在下次再次执行时创建一个新的任务对象。您可以保留对任务对象的引用,并使用CancellationTokenSource
取消它
我建议只通过bool变量或任务变量本身跟踪任务是否正在运行,其中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
}
}
任务对象并不意味着可以多次运行,也不意味着可以随意启动和停止。如果取消某个任务或该任务运行至完成,则意味着您要在下次再次执行时创建一个新的任务对象。您可以保留对任务对象的引用,并使用CancellationTokenSource
取消它
我建议只通过bool变量或任务变量本身跟踪任务是否正在运行,其中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
}
}
所以你的问题是:“这是用C#来表达无操作任务的惯用方式吗?”是的。我想在需要时进行初始化,而不是运行。那么您现在的问题是什么?我想知道创建任务的代码约定是否正确?如果您关心可读性和样式,那么我建议var newTask=newTask(()=>{})代码>,即在不需要时不要重复任务。所以你的问题是:“这是用C#来表达不可操作任务的惯用方式吗?”是的。我想在需要时进行初始化,而不是运行。那么您现在的问题是什么?我想知道创建任务的代码约定是否正确?如果您关心可读性和样式,那么我建议var newTask=newTask(()=>{})代码>,即在不需要时不要重复任务。