Csharp/C#教程:在TPL中返回一个空的静态任务是一种不好的做法?分享


在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 condition) { if condition(){ ... do the work } return theEmptyTask; } } 

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

我觉得这种方法应该有一些小问题。 有人能看到吗?

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

仅使用一个静态完成的任务也没有任何错误。 没有必要让一大堆不同的任务完全相同,因为一旦它们完成,如果它们没有结果,重复使用它们没有任何问题。

请注意,如果要返回已完成的任务,可以使用Task.FromResult生成一个比现在正在执行的更少的开销,因为您不会创建一个空方法,安排它,等待它开始,然后立即完成。 只返回Task.FromResult(false)将为您提供已完成的任务。

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

 public static Task FromResult(T result) { var tcs = new TaskCompletionSource(); tcs.SetResult(result); return tcs.Task; } 

只要你交回一个处于完成状态的任务(使用TaskCompletionSource来执行此操作),我就不会想到这有任何问题,因为Task类上实际上没有任何setter允许客户端捣乱你的静态空任务。 他们可以在你的任务上调用Dispose() ,但我认为这不会造成任何伤害(即我认为它不会影响检查任务属性的能力(没有尝试过 – 某些东西)值得测试))。

上述就是C#学习教程:在TPL中返回一个空的静态任务是一种不好的做法?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1019810.html

(0)
上一篇 2022年1月4日
下一篇 2022年1月4日

精彩推荐