[英]dedicated thread for logging .net
我正在考虑创建一个具有专用线程的异步日志记录组件,该线程将从队列中读取新项目并写入数据库,文件等。如果我将线程创建为后台线程,则该线程将在处理结束后立即终止,因此队列中的项目将丢失。 如果创建它是一个前台应用程序-我将不得不弄清楚何时停止它,因为它将阻止应用程序关闭。 有什么方法可以使开发人员记住在应用程序退出之前“停止”日志记录功能吗?
我相信您可以:
AppDomain.ProcessExit
事件; Volatile
前哨变量作为关闭标志 ; ProcessExit
事件触发时设置标志; 这样,您可以使前台线程了解即将到来的厄运。
首先,我必须同意以上评论。 我只会使用NLog之类的东西,而不是尝试自己动手做。 虽然一开始似乎有很多东西要学习,但它仍然比编写和调试自己的要好。
如果您真的想走这条路,我的建议是使用“ using”语句和IDisposable来控制异步行为。 只需在ctor中启动一个普通线程,并在Dispose()上发出信号并加入该线程即可。
用法示例:
void Main()
{
using (new Logging())
{
...
}
}
示例类(未试用):
class Logging :IDisposable
{
ManualResetEvent _stop = new ManualResetEvent(false);
Thread _worker = null;
public Logging()
{
_worker = new Thread(AsyncThread);
_worker.Start();
}
public void Dispose()
{
_stop.Set();
_worker.Join();
}
public void AsyncThread()
{
...
}
}
在您的日志记录例程中,您将要测试线程是否正在运行,然后决定使日志写入排队还是直接附加到日志输出之间。 这样,异步线程之前和之后的日志消息将继续正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.