我写了一个小方法。它基本上调用服务(而不是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<..>
。
我正在使用的秒表,这是实现超时的可接受方式吗?
答案 0 :(得分:1)
如果这是你的UI线程我会的。也许Timer
会更好?也许您应该使用SpinLock
?
答案 1 :(得分:0)
如果可以改进或取决于发生了什么。你应该为此产生一个新线程吗?如果您在等待SetLockBit
时需要当前线程用于其他内容(例如UI更新),那么是。如果您不需要当前线程来执行任何操作,那么这很好。
秒表很好。但是,如果您知道锁可能一次保持几秒钟,您可能需要等待一段时间才能再次调用SetLockBit
。如果你知道它们很快被释放,但是存在很多争用,那么你可能想要保留它。