c# – 在TPL中返回一个空的静态任务是不好的做法?

有些情况下,我想要有条件地运行任务.我使用一些这样的扩展方法:

public static class MyTaskExtension{
  private static Task theEmptyTask = Task.Factory.StartNew(() => {}); //This is the question

  public static Task ContinueWith(this Task task, Task continuationTask, Func<bool> condition)
  {
    if condition(){
       ... do the work
    }
    return theEmptyTask;
  }
}

我的期望是,已经完成了这个Silverlight,所以基本上如果我不想做任何事情,我只是返回这个任务,而不是null或一个新的空任务.

我有一种感觉,这种做法应该有一些毛病.有谁能看到吗?

在某些上下文中返回已完成的任务是完全可以接受的.这不是特别经常做的事情,但已经完成了.

只要使用一个静态完成的任务就完全没有问题.没有必要有一大堆不同的任务完全相同,因为一旦完成,如果没有结果,重用它们就没有错.

请注意,如果要返回已完成的任务,您可以使用Task.FromResult生成一个比您现在正在做的更少的开销,因为您不会创建一个空的方法,调度它,等待它成为开始,然后立即完成.刚刚返回Task.FromResult(false)将给你一个已经完成的任务.

如果您使用的是.NET 4.0,您可以轻松创建自己的FromResult:

public static Task FromResult<T>(T result)
{
    var tcs = new TaskCompletionSource<T>();
    tcs.SetResult(result);
    return tcs.Task;
}
翻译自:https://stackoverflow.com/questions/15562845/is-returning-an-empty-static-task-in-tpl-a-bad-practice

转载注明原文:c# – 在TPL中返回一个空的静态任务是不好的做法?