C# 暂停System.Timers.Timer';他的工作
我已经开始讨论:在周期、任务、延迟或线程中,使用什么更好的方法暂停System.Timers.Timer的作业1秒?睡眠 以下是示例案例:C# 暂停System.Timers.Timer';他的工作,c#,multithreading,performance,task,C#,Multithreading,Performance,Task,我已经开始讨论:在周期、任务、延迟或线程中,使用什么更好的方法暂停System.Timers.Timer的作业1秒?睡眠 以下是示例案例: timer.Elapsed += (sender, args) => { for (int i = 0; i < 15; i++) { Thread.Sleep(1000); if (Connection.IsAlive) return true; } }; timer.appeased+=(发送方,参数)=> {
timer.Elapsed += (sender, args) =>
{
for (int i = 0; i < 15; i++)
{
Thread.Sleep(1000);
if (Connection.IsAlive) return true;
}
};
timer.appeased+=(发送方,参数)=>
{
对于(int i=0;i<15;i++)
{
睡眠(1000);
if(Connection.IsAlive)返回true;
}
};
请帮我说说理由:)这取决于你的目标是什么
Thread.Sleep
将阻止正在使用的系统线程。默认情况下,System.Timers.Timer使用系统线程池,这意味着您不会阻塞主线程,并且thread.Sleep
的使用可能会与程序的其余部分同时执行。如果希望使用(并因此阻止)特定线程,则需要与thread.Sleep
配合使用该属性
Task.Delay
将在不阻塞当前线程的情况下提供逻辑延迟。这是最好的方法,除非您有理由阻止特定线程。请记住,要使用任务,您需要使事件处理程序异步。延迟
:
timer.Elapsed += async (sender, args) =>
{
for (int i = 0; i < 15; i++)
{
await Task.Delay(1000);
...
}
}
timer.appeased+=async(发送方,参数)=>
{
对于(int i=0;i<15;i++)
{
等待任务。延迟(1000);
...
}
}
当您尝试这两种方法时发生了什么?如果您正在利用异步等待,则使用等待任务。延迟您不必阻塞线程。如果这段代码同时会被击中,我会考虑它,否则我可能不会费心。你如何定义哪个是“更好”?“更好”是指正确的一个: