System.Timers.Timer是否在与创建它的线程不同的线程上经过?
让我们说我有一个定时器,每5秒触发一次.当计时器触发时,在已用方法中,某些对象被修改.让我们说修改这个对象需要很长时间,比如10秒.在这种情况下,我是否可能遇到线程冲突?
我想每秒执行一些代码.我现在使用的代码是:
Task.Run((作用)ExecuteSomething);
并ExecuteSomething()
定义如下:
private void ExecuteSomething()
{
Task.Delay(1000).ContinueWith(
t =>
{
//Do something.
ExecuteSomething();
});
}
Run Code Online (Sandbox Code Playgroud)
这个方法会阻塞一个线程吗?或者我应该Timer
在C#中使用class?似乎Timer还专门用于执行(?)
我必须每 250 毫秒测试一次布尔值,最多 2 秒,并在为真时停止。
尝试过这个,但 Thread.Sleep 对我来说不是一个好的解决方案,因为它冻结了我的软件,并且等待更多不会改变任何东西,因为布尔值在冻结时不会改变。
bool onLine = false;
Stopwatch chrono = new Stopwatch();
chrono.Start();
while (chrono.ElapsedMilliseconds < 2000)
{
if (!State().Equals(Online))
{
System.Threading.Thread.Sleep(250);
}
else
{
onLine = true;
operationCompleted();
break;
}
}
if (!onLine)
{
MessageBox.Show("Error");
}
Run Code Online (Sandbox Code Playgroud)
如果有人有正确的实现,我不知道如何在计时器引发的事件中进行测试?