Not perfect solution just idea make your own solution to take basic concept.
Async code has the following characteristics:
Handles more server requests by yielding threads to handle more requests while waiting for I/O requests to return.
Enables UIs to be more responsive by yielding threads to UI interaction while waiting for I/O requests and by transitioning long-running work to other CPU cores.
Many of the newer .NET APIs are asynchronous.
While writing the multi-threaded application, there are a bunch of known issues that we should be able to handle. Deadlocks and race conditions are few to name.
Thread.Abort() method can be used to destroy the running thread.