Tôi có một số mã bắt đầu một vài chuỗi để cho phép thực thi, sau đó sử dụng vòng lặp while để kiểm tra thời gian hiện tại vượt qua khoảng thời gian chờ đã đặt hoặc cho số lượng kết quả chính xác đã được xử lý (bằng cách kiểm tra int trên đối tượng lớp) (với số Thread.Sleep()
để chờ giữa các vòng)Tại sao mã của tôi dừng lại và không trả lại ngoại lệ?
Khi vòng lặp while được đặt để thoát, nó gọi số Abort()
trên chủ đề và sẽ trả về dữ liệu cho hàm gọi phương thức.
Khi gỡ lỗi và bước qua mã, tôi thấy có thể có ngoại lệ trong mã chạy trên các chuỗi riêng biệt và trong một số trường hợp, tôi xử lý một cách thích hợp và vào những lúc khác, tôi không muốn làm gì cụ thể.
Điều tôi đã thấy là mã của tôi đi vào vòng lặp while và luồng ngủ, sau đó không có gì được trả lại từ hàm của tôi, dữ liệu hoặc ngoại lệ. Thực thi mã chỉ dừng hoàn toàn.
Bất kỳ ý tưởng nào có thể xảy ra?
mẫu Mã số:
System.Threading.Thread sendThread =
new System.Threading.Thread(new System.Threading.ThreadStart(Send));
sendThread.Start();
System.Threading.Thread receiveThread =
new System.Threading.Thread(new System.Threading.ThreadStart(Receive));
receiveThread.Start();
// timeout
Int32 maxSecondsToProcess = this.searchTotalCount * timeout;
DateTime timeoutTime = DateTime.Now.AddSeconds(maxSecondsToProcess);
Log("Submit() Timeout time: " + timeoutTime.ToString("yyyyMMdd HHmmss"));
// while we're still waiting to receive results & haven't hit the timeout,
// keep the threads going
while (resultInfos.Count < this.searchTotalCount && DateTime.Now < timeoutTime)
{
Log("Submit() Waiting...");
System.Threading.Thread.Sleep(10 * 1000); // 1 minute
}
Log("Submit() Aborting threads"); // <== this log doesn't show up
sendThread.Abort();
receiveThread.Abort();
return new List<ResultInfo>(this.resultInfos.Values);
Bạn không nên sử dụng Thread.Abort, làm một google vì lý do tại sao. –
10 * 1000 không phải là phút :) (1000 * 60 ms = 60 s = 1 phút) – Simon
Có tôi biết :) Tôi đã thay đổi mục này cho mục đích thử nghiệm nhưng không bao giờ cập nhật nhận xét .... – BeckyLou