I have a Windows Service that uses Thread and SemaphoreSlim to perform some \"work\" every 60 seconds.
class Daemon
{
private SemaphoreSlim _semaphore;
You can do this, but it wouldn't be a good idea. As soon as the first await
hits that is not synchronously completed, the rest of the work will be done on a continuation, not the thread you started (_thread
); the thread you start will terminate at the first such await
. There is no guarantee that a continuation will go back to the originating thread, and in your scenario, it cannot - that thread is now toast. That means that:
_thread
is meaningless and does not represent the state of the operation; as such, your Stop()
method with a _thread.Join();
doesn't do what you expect it to doBoth of these issues can avoided by using Task.Run
to start such operations.