我们有一个用C#编写的WebApi json休息服务,用于在AWS中运行的.Net 4.0。该服务有一个/ log端点,它接收日志并通过tcp将日志转发到logstash进行存储。
/ log端点使用Task.Factory.StartNew将日志发送到logstash async并立即返回StatusCode.OK。这是因为我们不希望客户端等待将日志发送到logstash。
所有异常都被观察和处理,我们也不在乎日志是否丢失,因为服务因不关键而不时关闭或回收。
起初,原木流量非常低,在偷看时间内每小时可能达到20或30。但是我们最近开始发送大量的日志,每小时可以超过一千。所以现在的问题是,通过使用Task.Factoring.StartNew,我们生成了大量的线程,即每个请求到/ log端点1个,还是由线程池以某种方式管理?
我们使用nLog进行内部日志记录,但是想知道我们是否可以将日志从/ log端点传递给nlog以利用其异步批处理功能并将日志发送到logstash?我们有一个自定义目标,可以将日志发送到tcp端口。
提前致谢。
答案 0 :(得分:0)
.NET中的任务不等于一个线程。尽可能多地创建(几乎)创建它是安全的。 .NET将管理创建的线程数。 .NET不会启动比硬件可以处理的任务更多的任务。