如果我们要创建一个没有ssh -Y $yourserver
的基于observer:start().
的{{1}},我们仍然需要提供TaskCompletionSource<T>
并设置虚拟值。像这样:
Task
从性能角度来看,Result
的最佳类型是什么?
似乎很难仅仅通过运行微观基准来回答这个问题。我想答案取决于应用程序的其余部分。例如,如果我们使用T
将导致JIT生成专门的代码并导致内存使用。但如果应用程序已经使用基于布尔的任务,它将不会添加内存使用量。如果我们使用Task SomethingAsync() {
var tcs = new TaskCompletionSource<?>();
tcs.SetResult(default(?)); //Can happen later as well, this is for demo purposes.
return tcs.Task;
}
,我们可能会为每个任务使用更多内存(或者不依赖于运行时)。
这就是为什么我认为只有基准测试不能回答这个问题,而且必须通过推理来回答。
答案 0 :(得分:3)
如果您真的想要最好的解决方案,则需要声明一个空结构。这样,系统将不必为有效载荷保留任何空间。这实际上是在基类库中完成的:
window.location.reload(false);
// If we needed to pull the document from
// the web-server again (such as where the document contents
// change dynamically) we would pass the argument as 'true'.
从那里,您可以使用private struct VoidResult { }
和TaskCompletionSource<VoidResult>
将任务标记为已完成。
也就是说,它节省了一点点内存,但我认为它对执行时间没有任何影响(即使在纳秒级别)。无论您使用TrySetResult(default(VoidResult))
(为有效负载保留一个字节)还是TaskCompletionSource<byte>
(为有效负载保留四个字节),32位CPU仍然可以在一次操作中完成分配。