Threading.Timer异步调用许多方法

时间:2009-11-29 13:40:05

标签: .net asynchronous multithreading methods timer

我从global.asax调用一个threading.timer,它调用许多方法,每个方法从不同的服务获取数据并将其写入文件。 我的问题是我如何定期调用方法,比方说5分钟?

我做的是: 在Global.asax中我声明了一个计时器

protected void Application_Start()
{
    TimerCallback timerDelegate = new TimerCallback(myMainMethod);
    Timer mytimer = new Timer(timerDelegate, null, 0, 300000);
    Application.Add("timer", mytimer);
}  

myMainMethod的声明如下:

public static void myMainMethod(object obj)
{
    MyDelegateType d1 = new MyDelegateType(getandwriteServiceData1);
    d1.BeginInvoke(null, null);
    MyDelegateType d2 = new MyDelegateType(getandwriteServiceData2);
    d2.BeginInvoke(null, null);
 }

这种方法运行正常,但它每5分钟调用一次myMainMethod。我需要的是在所有数据被撤销并写入服务器上的文件后5分钟调用的方法。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

你应该在“myMainMethod”结束前重新创建一个计时器, 并禁用/删除以前的计时器。我不知道C3语法

类似的东西:

protected void Application_Start()
{
    TimerCallback timerDelegate = new TimerCallback(myMainMethod);
    Timer mytimer = new Timer(timerDelegate, null, 0, 300000);
    Application.Add("timer", mytimer);
}


public static void myMainMethod(object obj)
{
    MyDelegateType d1 = new MyDelegateType(getandwriteServiceData1);
    d1.BeginInvoke(null, null);
    MyDelegateType d2 = new MyDelegateType(getandwriteServiceData2);
    d2.BeginInvoke(null, null);
    // find a way to pass mytimer as an argument of the myMainMethod
    // or use a global variable
    Application.Remove("timer", mytimer);
    Application.Add("timer", mytimer);
}