ASP.Net WebApi Rest服务 - 使用Task.Factory.StartNew

时间:2016-09-01 09:42:51

标签: c# asynchronous asp.net-web-api service

我们有一个用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端口。

提前致谢。

1 个答案:

答案 0 :(得分:0)

.NET中的任务不等于一个线程。尽可能多地创建(几乎)创建它是安全的。 .NET将管理创建的线程数。 .NET不会启动比硬件可以处理的任务更多的任务。