异步多线程异常处理?我想在我的异步编程(beginInvoke/endInvoke)中有一个异常处理方法,如果任何一个线程(beginInvoke)失败,那么我希望所有其他异步处理线程停止工作。请建议一些解决方案?,下面我也附上了我的示例代码:列表asyncResults=newList();foreach(ThreadRequestDtotinrequestDto){//创建一个委托。DoSomeAsynchWorkDelegatedel=newDoSomeAsynchWorkDelegate(DoSomeAsynchWork);//发起异步调用IAsyncResulta=del.BeginInvoke(t,null,del);//IAsyncResulta=del.BeginInvoke(t,null,null);asyncResults.Add(a);}foreach(IAsyncResultarinasyncResults){//等待每个完成,然后调用EndInvoke,传入IAsyncResult。//我们将ar.AsyncState转换为DoSomeAsynchWorkDelegate,因为我们将其作为第二个参数传递给BeginInvoke。ar.AsyncWaitHandle.WaitOne();//IAsyncResult的AsyncState属性用于获取用于调用该方法的委托DoSomeAsynchWorkDelegatedel=(DoSomeAsynchWorkDelegate)ar.AsyncState;//调用EndInvoke获取结果。将结果添加到项目列表中。结果Dto.Add(del.EndInvoke(ar));}返回resultDto;}最好的方法可能是使用共享的ManualResetEvent,例如:classMyClass{privateManualResetEventworkFailedEvent=newManualResetEvent(false);publicListSendMailAsynch(ListrequestDto){workFailedEvent.Reset();//---你的代码的其余部分写在你的帖子中---}privatevoidDoAsyncWorkFirst(){try{for(inti=0;i这里有趣的部分是对WaitOne(0,true)的调用。如果使用0超时,线程将不会阻塞。由于操作系统同步了ManualResetEvent,因此这个特定的方法调用是一种检查信号的便捷方式,无需担心竞争条件或实现自己的锁定。以上是C#学习教程:异步多线程异常处理?全部内容分享,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表正文位置。如涉及侵权,请点击维权联系管理已被会员删除。如需转载,请注明出处:
