摘要:介绍一种方式控制生命周期对性能有影响的对象,以达到类似 RAII 的效果。利用 lambda 构造明确的作用域,当 lambda 执行完成后视作离开作用域。
常见方式是,对生命周期敏感的资源实现一个 IDisposable 的接口 如果觉得 IDisposable 依然不够可控,可以采取这种方式。
以一个生命周期敏感的 stream 为例, 例如 socket 的 NetworkStream, 可以这样设计 API
Task<T> GetNetworkStreamAsync<T>(Func<MyNetworkStream, Task<T>> usingStream);
使用者使用的方式
socket.GetNetworkStreamAsync(async myStream =>
{
var c = await myStream.ReadAsync(.....);
// other operations
return c;
});
API 实现
Task<T> GetNetworkStreamAsync<T>(Func<MyNetworkStream, Task<T> usingStream)
{
try
{
var myStream = CreateMyStream();
return usingStream(myStream);
}
finally
{
DestroyStream(myStream);
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.