nai*_*iem 15 c# static task task-parallel-library
有些情况下我想要有条件地运行任务.我使用某种类似的扩展方法:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我的期望是,theEmptyTask已经完成,所以基本上如果我不想做任何事情我只返回这个任务,而不是null或一个新的空任务.
我觉得这种方法应该有一些小问题.有人能看到吗?
Ser*_*rvy 21
在某些情况下返回已完成的任务是完全可以接受的.这不是特别经常做的事情,但已经完成了.
仅使用一个静态完成的任务也没有任何错误.没有必要让一大堆不同的任务完全相同,因为一旦它们完成,如果它们没有结果,重复使用它们没有任何问题.
请注意,如果要返回已完成的任务,可以使用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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5789 次 |
| 最近记录: |