私は非同期プログラミング(beginInvoke/endInvoke)でスレッド(beginInvoke)のいずれかが失敗した場合、他のすべての非同期処理スレッドが動作を停止するようにするアプローチを取りたいと思います。私はまた私のサンプルコードを添付しています下の?いくつかのソリューションを提案してください:非同期マルチスレッド例外処理?
public List<ThreadResultDto> SendMailAsynch(List<ThreadRequestDto> requestDto)
{
List<ThreadResultDto> resultDto = new List<ThreadResultDto>();
List<IAsyncResult> asyncResults = new List<IAsyncResult>();
foreach (ThreadRequestDto t in requestDto)
{
//Create a delegate.
DoSomeAsynchWorkDelegate del = new DoSomeAsynchWorkDelegate(DoSomeAsynchWork);
// Initiate the asynchronous call
IAsyncResult a = del.BeginInvoke(t,null, del);
//IAsyncResult a = del.BeginInvoke(t, null,null);
asyncResults.Add(a);
}
foreach (IAsyncResult ar in asyncResults)
{
// wait for each one to complete, then call EndInvoke, passing in the IAsyncResult.
// We cast ar.AsyncState to a DoSomeAsynchWorkDelegate, as we passed it in as the second parameter to BeginInvoke.
ar.AsyncWaitHandle.WaitOne();
//AsyncState property of IAsyncResult is used to get the delegate that was used to call that method
DoSomeAsynchWorkDelegate del = (DoSomeAsynchWorkDelegate)ar.AsyncState;
// Call EndInvoke to get the result. Add the result to the list of items.
resultDto.Add(del.EndInvoke(ar));
}
return resultDto;
}
FYI、非同期の一般的に受け入れられている省略形はAsyncではなく、Asynchです。 –