正在阅读:c#多线程教学(4):线程池和异步编程c#多线程教学(4):线程池和异步编程

2005-07-11 10:02 出处: 作者:c-sharpcorner 责任编辑:moningfeng

  当创建Timer对象时,你药估计在第一个代理调用之前等待的时间和后来的每次成功调用之间的时间。一个定时调用发生在方法的应得时间过去,并且在后来周期性的调用这个方法。你可以适应Timer的Change方法来改变这些设置的值或者使Timer失效。当定时器Timer不再使用时,你应该调用Dispose方法来释放其资源。

  TimerCallback代表负责指定与Timer对象相关联的方法(就是要周期执行的任务)和状态。它在方法应得的时间过去之后调用一次并且周期性的调用这个方法直到调用了Dispose方法释放了Timer的所有资源。系统自动分配分离的线程。

  让我们来看一段代码看看事如何创建Timer对象和使用它的。我们首先要创建一个TimerCallback代理,在后面的方法中要使用到的。如果需要,下一步我们要创建一个状态对象,它拥有与被代理调用的方法相关联的特定信息。为了使这些简单一些,我们传递一个空参数。我们将实例化一个Timer对象,然后再使用Change方法改变Timer的设置,最后调用Dispose方法释放资源。

// class that will be called by the Timer

public class WorkonTimerReq

{

public void aTimerCallMethod()

{

// does some work

}

}


//timer creation block

{

//instantiating the class that gets called by the Timer.

WorkonTimerReq anObj = new WorkonTimerReq () ;


// callback delegate

TimerCallback tcallback = new TimerCallback(anObj. aTimerCallMethod) ;


// define the dueTime and period

long dTime = 20 ; // wait before the first tick (in ms)

long pTime = 150 ; // timer during subsequent invocations (in ms)


// instantiate the Timer object

Timer atimer = new Timer(tcallback, null, dTime, pTime) ;


// do some thing with the timer object

...

//change the dueTime and period of the Timer

dTime=100;

pTime=300;

atimer.Change(dTime, pTime) ;

// do some thing

...

atimer.Dispose() ;

...

}



异步编程

  这部分内容如果要讲清楚本来就是很大的一部分,在这里,我不打算详细讨论这个东西,我们只是需要直到它是什么,因为多线程编程如果忽律异步的多线程编程显然是不应该的。异步的多线程编程是你的程序可能会用到的另外一种多线程编程方法。

  在前面的文章我们花了很大的篇幅来介绍线程的同步和怎么实现线程的同步,但是它有一个固有的致命的缺点,你或许注意到了这一点。那就是每个线程必须作同步调用,也就是等到其他的功能完成,否则就阻塞。当然,某些情况下,对于那些逻辑上相互依赖的任务来说是足够的。异步编程允许更加复杂的灵活性。一个线程可以作异步调用,不需要等待其他的东西。你可以使用这些线程作任何的任务,线程负责获取结果推进运行。这给予了那些需要管理数目巨大的请求而且负担不起请求等待代价的企业级的系统更好的可伸缩性。

  .NET平台提供了一致的异步编程机制用于ASP.NET,I/O,Web Services,Networking,Message等。


后记

  由于学习的时候很难找到中文这方面的资料,因此我就只好学习英文的资料,由于水平不高,翻译的时候可能难免曲解原文的意思,希望大家能够指出,同时希望这些东西能够给大家在学习这方面知识给予一定的参考和帮助,那怕是一点点,就很欣慰了。
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品