C# Task.Factory.StartNew是否有任何性能副作用?

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));

我正在通过启动一个新线程来记录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...
    }
}
问题是:在一个真正的高流量应用程序中,这种方法是否有任何副作用?在主上下文中登录是否更好

另外,这个问题与你有关

在一个真正的高流量应用程序中,这种方法有任何副作用吗

这通常取决于您运行的环境、硬件以及“真正的高流量”的实际含义

一般来说,使用新线程简单地记录日志可能会产生比“释放”当前线程以完成更多工作的实际收益更多的开销。是的,它将使用与ASP.NET线程池相同的线程,如果频繁调用它,可能会导致您的线程池饥饿,尽管这不太可能

此外,使用
Task.Factory.StartNew
是因为它没有向IIS注册卸载到该线程的工作

在我看来,你应该保持它的简单性并同步记录。

相关的博客帖子-和。