C# 如何在定时器内给静态变量赋值?

问题描述:我想在定时任务中把其中一个变量赋值给一个静态变量,通过这种方式来实现变量共享。但是遇到了一个问题,那就是我的定时任务执行完了,静态变量也就销毁了,无法达到我的预期想法。

定时器代码:
`[SampleManagerTask("EntityManagerTask")]

public class EntityManagerTask : SampleManagerTask, IBackgroundTask
{
    public void Launch()
    {
        Logger.Info("开始执行EntityManager Task...");
        Test();
    }

    public void Test()
    {
        for(int i = 0; i < 10; i++)
        {
            if (EntityManagerHelper.EntityManager == null)
            {
                Logger.Info("开始给EntityManagerHelper.EntityManager赋值!");
                EntityManagerHelper.EntityManager = EntityManager;
            } else
            {
                Logger.Info("EntityManagerHelper.EntityManager值已存在,无需赋值!");
            }
        }
    }
}`

静态变量代码:
`public class EntityManagerHelper

{
    public static IEntityManager EntityManager { get; set; }
}`

以及运行日志:
`[Start command at 2019-11-21 19:40:02,897]
Successfully Logged into SampleManager as SYSTEM
开始执行EntityManager Task...
开始给EntityManagerHelper.EntityManager赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
[End command at 2019-11-21 19:40:02,898]

[Start command at 2019-11-21 19:41:00,077]
Successfully Logged into SampleManager as SYSTEM
开始执行EntityManager Task...
开始给EntityManagerHelper.EntityManager赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
EntityManagerHelper.EntityManager值已存在,无需赋值!
[End command at 2019-11-21 19:41:00,078]`

我目前设置的是一分钟运行一次。理想状态应该是,运行第一次定时任务,进入第一个循环,才会给静态变量赋值。往后,不管是第几次运行定时任务,都不会给静态变量赋值,以为静态变量已经有值了!
但是发现每当我执行定时任务的时候,第一次拿出来的静态变量永远是空的。

现在目前怀疑可能是因为定时器线程的原因造成的,但是也不确定。

还希望有知道的大佬能够指点一番,非常感谢!

阅读 3.1k
1 个回答

先确定一下是否是同一个进程,同一个进程的话,考虑一下AppDomin

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进