我通过启动新线程来记录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 LogAsync(Exception ex) {
// doing some reflection stuff to retrieve code-place
// saving the log...
}
}
问题是:在真正的高流量应用中,这种方法是否有任何副作用?登录主要环境更好吗?
P.S。该问题与this one。
有关答案 0 :(得分:2)
在一个真正的高流量应用中,这种方法是否有任何副作用?
这通常取决于您正在运行的环境,您的硬件是什么,以及“实际高流量”实际意味着什么。
通常,使用新线程进行简单记录可能会产生比“释放”当前线程以执行更多工作的实际增益更多的开销。是的,它将使用ASP.NET ThreadPool使用的相同线程,如果它被频繁调用,您可能会导致池中的饥饿,尽管这不太可能。
此外,使用Task.Factory.StartNew
是ASP.NET is dangerous因为它没有注册使用IIS卸载到该线程的工作。
IMO,你应该保持简单并同步登录。