gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:44:33 24 4
gpt4 key购买 nike

有些情况下我想有条件地运行任务。我使用这样的某种扩展方法:

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;
}

关于c# - 在 TPL 中返回一个空的静态任务是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15562845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com