如何强制Windows服务同步而不是异步运行?

时间:2013-09-22 14:50:45

标签: c# multithreading asynchronous synchronous

由于我对第三方API的API流量速度限制,我需要确保Thread.Sleep()实际上会在我的代码段上运行。我认为最可靠的方法是同步而不是异步地运行进程 - 我已经接受了System.Timer,CurrentThread等的想法。

问题:什么是确保Thread.Sleep()阻止进一步执行所有处理的最可靠方法,或者一般来说,什么是最可靠的暂停方式执行Windows服务?如何确保进程同步运行?

1 个答案:

答案 0 :(得分:1)

任何用户对您的asp.net应用程序的每个请求都将在其自己的线程中运行。要同步该流量,您可以创建单个对象并构建一个使用锁的方法。 Lock实际上会锁定所有线程,直到当前线程结束。

因此,如果您发现需要设置超时,请构建锁定块并在内部设置超时。 现在所有线程都必须等待......

像这样的东西

public class ThreadLock
{
    private static readonly object myLock;

    public void LockTimeout()
    {
        // --> first thread will trigger the following code. 
        // All other threads will wait 
        // <-- HERE 
        // until the first went through 
        lock (myLock)
        {
            //... do some timeout work
        }
    }
}

无论如何,我真的不明白为什么你想要做这样的事情,因为通常我们都很高兴有异步工作的应用程序......反正。希望这有帮助