You should not use Task.Run or Task.Factory.StartNew. It seems you don't actually understand what async is. Namely, it's not parallel processing. All async does is allow the running thread to be returned to the pool if it enters a wait-state. Threads are generally a limited commodity; they have overhead and consume system resources. In something like a web server, the thread pool is usually capped at 1000, which means you can have 1000 active threads at any given time. Async simply allows threads which are idle to be returned to the pool, so that they can be used to do additional work, rather than just sitting there idle.
In the context of a web server, each request is assigned a thread. This is why the thread-cap on the server is usually referred to as the "max requests". One request always equals at least one thread. Doing something like creating a new thread, takes another thread from the pool, so now your single request is sitting on two threads (effectively halving your server's potential throughput). Now, if the action is async, the first thread will be returned to the pool, because the new thread is now active and the original is now idle. However, that means you've bought yourself nothing: you've simply traded one thread for another and added a bunch of unnecessary overhead. Creating a new thread is not the same as background processing; that's a common and dangerous misconception.
Plain and simple, the server cannot return a response until all work has completed on the action. Whether you use one thread or a thousand to get there, makes no difference in terms of response time (except that using more than one thread actually increases your response time, causing more delays, not less). Even async done properly will actually increase your response time, even if only by microseconds. This is because async has inherent overhead. Sync is always quicker. The benefit from async is that you can utilize resources more efficiently, not that anything happens "faster".