当前位置: 首页 > 编程语言 > C#

异步编程设计模式分享

时间:2023-04-10 23:34:20 C#

异步编程设计模式我在做一个CF.NET的小技术框架,请问异步部分应该怎么写?在MSDN上阅读了很多,但我不清楚。所以,这是代码:publicclassA{publicIAsyncResultBeginExecute(AsyncCallbackcallback){//我应该在这里放什么?}publicvoidEndExecute(){//我应该在这里放什么?}publicvoidExecute(){线程。睡眠(1000*10);如果有人可以帮助我......谢谢!您可以使用委托:publicclassA{publicvoidExecute(){Thread.Sleep(1000*3);}}classProgram{staticvoidMain(){vara=newA();动作del=(()=>a.Execute());varresult=del.BeginInvoke(state=>{((Action)state.AsyncState).EndInvoke(state);Console.WriteLine("finished");},del);Console.ReadLine();}}更新:根据评论部分的要求,这里有一个示例实现:publicclassA{privateAction_delegate;私有AutoResetEvent_asyncActiveEvent;publicIAsyncResultBeginExecute(AsyncCallbackcallback,objectstate){_delegate=()=>Execute();如果(_asyncActiveEvent==null){boolflag=false;尝试{Monitor.Enter(this,refflag);如果(_asyncActiveEvent==null){_asyncActiveEvent=newAutoResetEvent(真);}}finally{if(flag){Monitor.Exit(this);}}}_asyncActiveEvent.WaitOne();返回_delegate.BeginInvoke(回调,状态);}publicvoidEndExecute(IAsyncResultresult){try{_delegate.}最后{_delegate=null;_asyncActiveEvent.Set();}}privatevoidExecute(){Thread.Sleep(1000*3);}}classProgram{staticvoidMain(){Aa=newA();a.BeginExecute(state=>{Console.WriteLine("finished");((A)state.AsyncState).EndExecute(state);},a);控制台.ReadLine();你不需要做任何特别的事情,因为调用者应该异步调用你的方法,他定义了一个新的委托指向你的方法,并使用.线程)并尽快返回。执行必须在所有操作结束时调用AsyncCallback,以便使用异步操作的人知道并获得结果。EndExecute必须停止先前启动的异步操作(可能中断由BeginExecute启动的线程)。没有更多细节,这是我能做的最好的。如果你想异步运行一段代码,你应该使用BackgroundWorker。当然,除非您调用的代码本身不支持异步操作。就像读/写方法或服务调用。如果您希望收到异步操作已完成的通知,请使用委托或事件回调。以上就是《C#学习教程:异步编程设计模式分享》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: