Khi nào tôi phải vứt bỏ một CancellationTokenSource? Nếu tôi ví dụ như làm một và đặt nó trong Chủ đề mọi i bấm vào một nút:CancellationTokenSource, Khi nào cần xử lý?
private void Button_Click(object sender, EventArgs e)
{
if (clicked == false)
{
clicked = true;
CTSSend = new CancellationTokenSource();
Thread1 = new Thread(() => Method1(CTSSend.Token));
Thread1.Start();
Thread2 = new Thread(() => Method2(CTSSend.Token));
Thread2.Start();
}
else
{
CTSSend.Cancel();
CTSSend.Dispose();
clicked = false;
}
}
Am i nghĩa vụ phải xử lý nó như thế? Vì vậy, nếu có, nó sẽ có một chút vấn đề khi tôi cần phải đặt nó vào Disposer sẽ bỏ đi khi ứng dụng đóng lại, vì không bảo đảm rằng nó sẽ không được xử lý nếu tôi không cẩn thận chờ nó và điều đó sẽ gây ra một ObjectDisposedException.
Tôi thậm chí đã thử với điều này để ngăn chặn các trường hợp ngoại lệ (như tôi muốn không sử dụng Try Catch, tôi muốn thậm chí không nhận được lỗi ở nơi đầu tiên trong trường hợp này).
if (CTSSend != null)
{
CTSSend.Cancel();
CTSSend.Dispose();
}
if (CTSReceive != null)
{
CTSReceive.Cancel();
CTSReceive.Dispose();
}
Nhưng tốt, có lẽ tôi chỉ nên vứt bỏ nó cuối cùng và không thải bỏ nó sau khi Huỷ mọi lần? Mặc dù tôi không thích cách tiếp tục thêm tài nguyên vào một đối tượng mới.
Mọi người làm gì với những trường hợp này?
CHỈNH SỬA:
Câu hỏi cụ thể hơn sẽ giải quyết được (trong trường hợp của tôi).
Làm cách nào tôi có thể ràng buộc bool với CancellationToken? Vì vậy, tôi có thể có một cái gì đó như CTS.IsDisposed;
Một số đối tượng có điều đó, nhưng CTS không, nếu có, nó sẽ giải quyết được vấn đề tôi đang gặp phải. Tôi hiện đang sử dụng một bool riêng biệt, đó không phải là một cái gì đó tôi thích.
Đó là một "trùng lặp" có, nhưng người kia không thực sự nhận được câu trả lời, mọi người nói khác nhau. Một số người nói, bạn có thể để nó được, nói khác, bạn phải vứt bỏ nó. Và tôi tự hỏi, làm thế nào bạn có thể vứt bỏ nó mà không có cơ hội của một ngoại lệ khi bạn đóng nếu nó đã được xử lý. – Zerowalker