Hãy xem xét mã sau sử dụng chức năng thư viện Task cơ bản với một CancellationTokenSource. Nó khởi động một chuỗi điền vào một từ điển với giá và đọc dữ liệu từ một db máy chủ SQL. Chủ đề kết thúc sau khoảng 10 phút và cứ sau 2 giờ nó lại được khởi động lại, hãy gọi Hủy trước trong trường hợp chủ đề vẫn đang chạy.Ngoại lệ khi chạy System.Threading.Tasks.Task
private CancellationTokenSource mTokenSource = new CancellationTokenSource();
internal Prices(Dictionary<string, Dealer> dealers)
{
mDealers = dealers;
mTask = Task.Factory.StartNew
(() => ReadPrices(mTokenSource.Token), mTokenSource.Token);
}
internal void Cancel()
{
mTokenSource.Cancel();
}
private void ReadPrices(CancellationToken ct)
{
using (SqlConnection connection =
new SqlConnection(ConfigurationManager.AppSettings["DB"]))
{
connection.Open();
var dealerIds = from dealer in mDealers.Values
where dealer.Id != null
select dealer.Id;
foreach (var dealerId in dealerIds)
{
if (!ct.IsCancellationRequested)
{
FillPrices(connection);
}
else
break;
}
}
}
Hiện tại, ứng dụng gặp sự cố ngoại lệ sau trong nhật ký sự kiện.
Ứng dụng: Engine.exe Framework Phiên bản: v4.0.30319 Mô tả: Quá trình bị chấm dứt do một ngoại lệ chưa được giải quyết. Thông tin ngoại lệ: System.AggregateException Stack: tại System.Threading.Tasks.TaskExceptionHolder.Finalize()
Nó phải có để làm với mã ở đây vì thư viện Nhiệm vụ không được sử dụng bất cứ nơi nào khác nhưng tôi không thể tìm ra điều gì sai với mã. Có ai có một ý tưởng những gì có thể sai ở đây?
Thật không may, bạn không chụp đủ nhật ký của mình. 'AggregateException' có thể chứa bất kỳ số ngoại lệ nào khác và đó là những ngoại lệ có nhiều khả năng chứa thông tin hữu ích hơn để hỗ trợ chẩn đoán sự cố. –
Ngoài ra "Chủ đề kết thúc sau khoảng 10 phút và cứ sau 2 giờ ... trong trường hợp chủ đề vẫn đang chạy." - Nghe có vẻ như bạn đang xem xét vấn đề mà bạn nên điều tra - thường mất 10 phút, nhưng đôi khi vẫn chạy sau 2 giờ ... –
có chương trình khách hàng có thể hủy chuỗi bất kỳ lúc nào và khởi động lại vì vậy việc hủy bỏ chắc chắn là cần thiết – Laurijssen