巧用 using 作用域(IDisposable)的生命周期包装特性 实现前后置处理

需求:在多个方法前后输出日志

logger.Info("begin");
method();
logger.Info("end");

如果需要在方法后输出日志同时加上时长

logger.Info("begin");
var sw= Stopwatch.StartNew();
method();
sw.Stop();
logger.Info("end "+sw.ElapsedMilliseconds);

更优雅的写法

using(var stopwatchLogger = new StopwatchLogger())
{
	method();
}

class StopwatchLogger:IDisposable
{
	private Stopwatch _stopwatch;
	private ILogger _logger;
	public StopwatchLogger(ILogger logger)
	{
		_logger=logger;
		_logger.Info("begin");
		_stopwatch= Stopwatch.StartNew();
	}
	public void Dispose()
	{
		_stopwatch.Stop();
		_logger.Info("end "+_stopwatch.ElapsedMilliseconds);
	}
}

很多场景下都可以借鉴这样的写法

posted @ 2025-10-28 20:53  Rick Carter  阅读(28)  评论(1)    收藏  举报