Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制台应用程序上的计时器,安排行为_C#_Multithreading_Timer - Fatal编程技术网

C# 控制台应用程序上的计时器,安排行为

C# 控制台应用程序上的计时器,安排行为,c#,multithreading,timer,C#,Multithreading,Timer,我有许多后端控制台应用程序,需要在其上使用计时器。我使用以下方法在主方法中启动和维护控制台应用程序上的计时器: System.Timers.Timer statustimer = new System.Timers.Timer( double.Parse(ConfigurationManager.AppSettings["NotificationSendPeriod"]));

我有许多后端控制台应用程序,需要在其上使用计时器。我使用以下方法在主方法中启动和维护控制台应用程序上的计时器:

 System.Timers.Timer statustimer =
                    new System.Timers.Timer(
                        double.Parse(ConfigurationManager.AppSettings["NotificationSendPeriod"]));
                statustimer.Elapsed += ((sender, eventArgs) =>
                {
                    try
                    {
                        ProcessData();
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);

                    }
                });
                statustimer.Enabled = true; Console.ReadLine();
在ProcessData中,每次方法调用时,我都会启动一个新线程(我通过app.config中的计数器控制并行运行的线程数)

 public static async Task<bool> ProcessData()
    {
        try
        {
            new Thread(() =>
            {
                // Do work here 

            }).Start();



            return true;
        }
        catch (Exception exception)
        {
            Console.WriteLine(exception);
            _logInstance?.Error(exception, $"{exception.Message}\n{exception.StackTrace}");
            return false;
        }
    }
公共静态异步任务ProcessData()
{
尝试
{
新线程(()=>
{
//你在这里工作吗
}).Start();
返回true;
}
捕获(异常)
{
控制台写入线(例外);
_logInstance?.Error(异常,$“{exception.Message}\n{exception.StackTrace}”);
返回false;
}
}
我注意到,使用上面的代码一段时间后,控制台应用程序关闭,即使我正在使用console.Readline(),或者挂断,但什么也没有发生


你知道上面的代码有什么问题以及如何修复吗?

我相信每次触发时,
Timer.appeased
事件都会在一个单独的线程上运行。我不相信你需要创建一个新的。()我已经在Main上调用过一次了。我尝试运行你的代码,它正常工作。是否有错误/异常日志?