Tôi muốn có một cách tiếp cận xử lý ngoại lệ trong lập trình không đồng bộ của tôi (beginInvoke/endInvoke) trong đó nếu bất kỳ một luồng nào (beginInvoke) không thành công, thì tôi muốn tất cả luồng xử lý asynchrounous khác ngừng hoạt động. Xin gợi ý một số giải pháp dưới đây ?, Tôi gắn mẫu mã của tôi cũng:Xử lý ngoại lệ đa luồng không đồng bộ?
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, chữ viết tắt được chấp nhận chung của không đồng bộ là Async, không phải Asynch :) –