Tôi có một phương thức lấy đối số gọi lại để thực thi không đồng bộ, nhưng khối catch dường như không bắt bất kỳ ngoại lệ nào được gọi bằng lệnh đồng bộ (this.Submit
đề cập đến một phương thức đồng bộ) .Bắt một ngoại lệ được ném vào một cuộc gọi lại không đồng bộ
public void Submit(FileInfo file, AnswerHandler callback)
{
SubmitFileDelegate submitDelegate = new SubmitFileDelegate(this.Submit);
submitDelegate.BeginInvoke(file, (IAsyncResult ar) =>
{
string result = submitDelegate.EndInvoke(ar);
callback(result);
}, null);
}
Có cách nào để bắt ngoại lệ ném bởi thread mới và gửi nó đến các chủ đề ban đầu? Ngoài ra, đây có phải là cách "thích hợp" để xử lý ngoại lệ không đồng bộ không? Tôi đã viết mã của mình để nó có thể được gọi như thế này (giả sử vấn đề ngoại lệ là cố định):
try
{
target.Submit(file, (response) =>
{
// do stuff
});
}
catch (Exception ex)
{
// catch stuff
}
nhưng có cách nào thích hợp hơn hoặc thanh lịch để làm điều này?
Khối catch trong mẫu mã đầu tiên của bạn sẽ bắt được một ngoại lệ được gọi bằng cách gọi lại hoặc bởi EndInvoke.Khối catch trong mẫu mã thứ hai của bạn sẽ bắt bất kỳ ngoại lệ nào được ném bởi hàm tạo SubmitFileDelegate hoặc bởi BeginInvoke. Mà một trong những không làm những gì bạn mong đợi/muốn nó để làm gì? – dgvid
Rất tiếc, đã quên xóa điều đó. Tôi muốn người thứ hai làm việc đúng cách, nhưng hiện tại, không phải thế. – kevmo314
Bạn có thể chỉ ra cách 'SubmitFileDelegate' được định nghĩa không? – GolfWolf