C# Task.Factory.StartNew是否有任何性能副作用?
我正在通过启动一个新线程来记录ASP.NET Web API 2应用程序中的异常:C# Task.Factory.StartNew是否有任何性能副作用?,c#,multithreading,asynchronous,asp.net-web-api2,C#,Multithreading,Asynchronous,Asp.net Web Api2,我正在通过启动一个新线程来记录ASP.NET Web API 2应用程序中的异常: void MainMethod(){ try{ // stuff... } catch (Exception ex) { Logger.Log(ex); } } class Logger { void Log(Exception ex) { Task.Factory.StartNew(() => LogAsync(ex));
void MainMethod(){
try{
// stuff...
} catch (Exception ex) {
Logger.Log(ex);
}
}
class Logger {
void Log(Exception ex) {
Task.Factory.StartNew(() => LogAsync(ex));
}
void LogAsync(Exception ex) {
// doing some reflection stuff to retrieve code-place
// saving the log...
}
}
问题是:在一个真正的高流量应用程序中,这种方法是否有任何副作用?在主上下文中登录是否更好
另外,这个问题与你有关
在一个真正的高流量应用程序中,这种方法有任何副作用吗
这通常取决于您运行的环境、硬件以及“真正的高流量”的实际含义
一般来说,使用新线程简单地记录日志可能会产生比“释放”当前线程以完成更多工作的实际收益更多的开销。是的,它将使用与ASP.NET线程池相同的线程,如果频繁调用它,可能会导致您的线程池饥饿,尽管这不太可能
此外,使用Task.Factory.StartNew
是因为它没有向IIS注册卸载到该线程的工作
在我看来,你应该保持它的简单性并同步记录。相关的博客帖子-和。