等待值为true,需要线程吗?

时间:2013-09-13 15:54:35

标签: c# multithreading

我写了一个小方法。它基本上调用服务(而不是Web服务)来设置锁属性。它确实有效,但我有兴趣改进它。我真的应该在一个新线程中运行它吗?

我在do..while内运行,并且在呼叫之间没有thread.sleep

我正在使用秒表记录它实际超过20秒的时间并且我仍然退出,因为无法设置锁定。

public bool ObtainLock(Uri lockUri)
{
    bool lockResult = false;

    var sw = new Stopwatch();
    sw.Start();
    do
    {
        lockResult = myService.SetLockBit(lockUri);
    }
    while (!lockResult || sw.ElapsedMilliseconds >= 20000);

    sw.Stop();

    return lockResult;
}

在我看来它可以改进,并且线程让我担心。注意,myservice不是一个Web服务,它只是一个类的另一个方法,所以我可以在这里使用Task<..>

我正在使用的秒表,这是实现超时的可接受方式吗?

2 个答案:

答案 0 :(得分:1)

如果这是你的UI线程我会的。也许Timer会更好?也许您应该使用SpinLock

答案 1 :(得分:0)

如果可以改进或取决于发生了什么。你应该为此产生一个新线程吗?如果您在等待SetLockBit时需要当前线程用于其他内容(例如UI更新),那么是。如果您不需要当前线程来执行任何操作,那么这很好。

秒表很好。但是,如果您知道锁可能一次保持几秒钟,您可能需要等待一段时间才能再次调用SetLockBit。如果你知道它们很快被释放,但是存在很多争用,那么你可能想要保留它。