6

Tôi đang sử dụng Thư viện song song nhiệm vụ để chạy một tác vụ - khi bị hủy - ném OperationCanceledException, sau đó bị bắt khi sử dụng AggregateException, như sau. AggregateException chứa một danh sách các TaskCanceledExceptions, tương ứng với các ngoại lệ được ném. Thật không may, các TaskCanceledExceptions này dường như đang mất các dấu vết ngăn xếp được ném bởi các ngoại lệ ban đầu. Đây có phải là do thiết kế không?TaskCanceledException trong AggregateException không chứa dấu vết ngăn xếp

try 
{ 
    task1.Wait(); 
} 
catch (AggregateException aggEx) 
{ 
    var tcex = ex as TaskCanceledException; 
    if (tcex != null) 
    { 
     Debug.WriteLine("InnerException:{0}, Message:{1}, Source:{2}, StackTrace: {3}", 
      tcex.InnerException, tcex.Message, tcex.Source, tcex.StackTrace); 

     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

Kết quả:

InnerException:, Message:A task was canceled., Source:, StackTrace: 
+2

Vui lòng cập nhật mã của bạn để phản ánh kết quả bạn đã đăng! :) –

+0

Dòng "if (tcex! = Null)" có chính xác không? Có vẻ như nó phải là "if (tcex == null)" –

+0

@MatthewWatson - 'if' này lọc ra các ngoại lệ khác. –

Trả lời

1

Tôi nghĩ rằng đó là do thiết kế, nhiệm vụ hủy hợp ngoại lệ được thông thường chỉ ném khi một nhiệm vụ bị hủy như có nghĩa là để giúp các nhiệm vụ để thoát. Dấu vết ngăn xếp có mục đích gì trong tình huống này? Điều đó đang được nói rằng tôi không có cái nhìn sâu sắc vào quá trình suy nghĩ của dev đã thiết kế các trường hợp ngoại lệ hủy bỏ, chỉ là ý kiến ​​của tôi.

Tôi không hoàn toàn chắc chắn ý của bạn là gì bởi chúng mất dấu vết ngăn xếp được ném bởi ngoại lệ ban đầu? Thông thường họ sẽ không có ngoại lệ bên trong/ban đầu. Có lẽ bạn đang hủy một nhiệm vụ do một số ngoại lệ khác? Trong trường hợp đó, bạn nên bắt được ngoại lệ "ban đầu" ngoại lệ, đăng nhập ở đó, sau đó hủy sau.

+3

Lý do tại sao một dấu vết ngăn xếp sẽ là cần thiết cho mục đích ghi nhật ký; Tôi đang gọi ThrowIfCancellationRequested() trong suốt các điểm khác nhau trong mã của tôi. Việc ghi nhật ký ngăn xếp sẽ cho phép tôi xác định tại thời điểm mà yêu cầu hủy được xác nhận. – sfarrugia

Các vấn đề liên quan