【发布时间】:2015-12-21 14:06:24
【问题描述】:
我的代码中有一部分:
private void Wait(String expectedResponse)
{
waitTimeout = 30;
Stopwatch sw = new Stopwatch();
sw.Start();
while (!inputBuffer.Contains(expectedResponse))
{
if (sw.Elapsed.Seconds < waitTimeout)
{
Thread.Sleep(1);
}
else
{
sw.Stop();
throw new Exception("Timeout");
}
}
sw.Stop();
Console.WriteLine("SUCCESS");
}
Wait 方法在主线程中运行,有时在创建主线程的线程中运行。
而且有时程序的方法会无限循环,虽然时间(30秒)过去了,并没有产生异常。
那么,有什么问题吗? StopWatch 类不是线程安全的?如果是这样,如何重写代码?
有什么想法吗?
谢谢!
【问题讨论】:
-
正如文档所说 (msdn.microsoft.com/ru-ru/library/…) 它不是线程安全的。
-
我认为 Thread Sleep 会停止秒表,所以计时器甚至没有达到 1 秒!
-
不管
Stopwatch是否是线程安全的,对于这个sn-p 的代码都没有关系。该对象未在线程之间共享。真正的问题是,inputBuffer是什么,that 是线程安全的吗?至于没有抛出异常,那完全取决于你如何管理调用Wait的线程 -
这能回答你的问题吗? Is Stopwatch.ElapsedTicks threadsafe?
标签: c# .net multithreading thread-safety stopwatch