Task.Factory.StartNew 有任何性能副作用吗?

Does Task.Factory.StartNew has any performance side effects?

我在 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。问题与 .

有关

in a real high traffic app, does this approach has any side effects?

这通常取决于您 运行 所在的环境、您的硬件以及 "real high traffic" 的实际含义。

一般来说,使用新线程来简单记录可能会产生比 "freeing up" 当前线程做更多工作的实际增益更多的开销。是的,它将使用 ASP.NET 线程池使用的相同线程,如果它被频繁调用,您可能会导致池饥饿,尽管这不太可能。

此外,使用 Task.Factory.StartNewASP.NET is dangerous,因为它不会使用 IIS 注册卸载到该线程的工作。

IMO,你应该保持简单并同步记录。