我已经开始讨论了:在循环,Task.Delay或Thread.Sleep中暂停System.Timers.Timer作业1秒的最佳方法是什么?
以下是示例案例:
timer.Elapsed += (sender, args) =>
{
for (int i = 0; i < 15; i++)
{
Thread.Sleep(1000);
if (Connection.IsAlive) return true;
}
};
请帮我解释一下:)
答案 0 :(得分:0)
这取决于你的目标是什么。
Thread.Sleep
将阻止正在使用的系统线程。默认情况下,System.Timers.Timer使用系统线程池,这意味着您不会阻止主线程,并且Thread.Sleep
可能的使用将与其余部分同时执行你的计划。如果您希望使用(并因此阻止)特定线程,则需要使用SynchronizingObject属性,与Thread.Sleep
配合使用。
Task.Delay
将提供逻辑延迟而不会阻塞当前线程。除非您有理由阻止特定线程,否则这是最好的方法。请注意,您需要使事件处理程序异步才能使用Task.Delay
:
timer.Elapsed += async (sender, args) =>
{
for (int i = 0; i < 15; i++)
{
await Task.Delay(1000);
...
}
}