在某些情况下,我想有条件地运行任务。我使用某种扩展方法,如下所示:
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;
}
}
我的期望是 theEmptyTask 已经完成,所以基本上如果我不想做任何事情,我只是返回这个任务,而不是 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)